Thread Hilfe bei charset und use utf8 (10 answers)
Opened by bianca at 2014-07-09 19:10

bianca
 2014-07-09 19:10
#176354 #176354
User since
2009-09-13
6991 Artikel
BenutzerIn

user image
Irgendwie hab ich hier ein für mich im Moment nicht ersichtliches Problem. Habe das ganze mal vereinfacht.
Es gibt drei Komponenten:
test_charset3.pl -> Definition von Konstanten mit Umlauten
test_charset2.pl -> eine Art Bibliothek die test_charset3.pl required
test_charset1.pl -> Hauptprogramm, das bei test_charset2.pl per CPAN:LWP::UserAgent was anfordert

test_charset1.pl ist vorgegeben in charset "ANSI", kann ich nichts dran ändern. Weitere Vorgabe ist, dass der Browser zwingend ISO-8859-15/latin9 zu bekommen hat.
test_charset2.pl und test_charset3.pl kann ich ändern, sind in der jetzigen Versuchsanordnung in UTF-8 gespeichert. Alles mit Notepad++ auf Windows 7.

Der Fehler: Wenn ich in Script 2 oder 3 oder in beiden oben das use utf8; aktiviere erhalte ich
Code: (dl )
Wide character in subroutine entry at D:/meinpfad/test_charset1.pl line 21


Warum ist das so, ich verstehe das nicht?

Bitte stellenweise nicht über die unnützen Kommandos wundern, das ist ein reduzierter Nachbau. Ich möchte nur wissen, warum das use utf8; hier zu einem Fehler führt.
Dabei ist übrigens egal, ob ich die Scripte mit oder ohne BOM speichere, es kommt trotzdem der Fehler. Ich dachte, ich hätte den Artikel Zeichenkodierungen

Scripte:
more (15.9kb):

test_charset1.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/usr/bin/perl -w
use strict 1.04;
use warnings 1.06;
use CGI 3.52;
use LWP::UserAgent;
use HTTP::Request::Common 'POST';
use JSON 2.53;
use Text::Iconv;
# dieses Script wird in Notepad++ als "ANSI" gespeichert

my $test = POST(
    'http://lokalerserver/test_charset2.pl',
    Content_Type    => 'form-data',
    Content         => [
        dummy => 'foo',
    ],
);
my $userAgent = LWP::UserAgent->new();
my $response = $userAgent->request($test);
my $content = $response->decoded_content;
my $ref = JSON->new->utf8->decode($content);
my %test = %$ref;
my $out = '';
foreach my $k (keys %test) { $out .= $test{$k} }
my $converter = Text::Iconv->new('UTF-8','ISO-8859-15');
$out = $converter->convert($out);
print STDOUT CGI->new->header(-charset=>'ISO-8859-15').<<HTML_TEIL
<doctype html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=ISO-8859-15">
</head>
<body>
<pre>$out</pre>
</body>
</html>
HTML_TEIL
;


test_charset2.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl -w
use strict 1.04;
use warnings 1.06;
use CGI 3.52;
#use utf8;
# dieses Script wird in Notepad++ als "UTF-8" gespeichert

require 'test_charset3.pl';
my $test = testdef();

$test->{'umlaute1'} = '"öäüÖÄÜ€@ß"';

my %ausgabe = (
    1 => $test->{'umlaute1'},
    2 => $test->{'umlaute2'},
);
$test->{ausgabe}->(\%ausgabe);


test_charset3.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w
use strict 1.04;
use warnings 1.06;
use CGI 3.52;
use JSON 2.53;
#use utf8;
# dieses Script wird in Notepad++ als "UTF-8" gespeichert

sub testdef {
    my %test = (
        'umlaute2'  => '"öäüÖÄÜ@€ß"',
        'ausgabe'   => sub {
            my ($data) = @_;
            my $json = JSON->new->utf8->encode($data);
            print STDOUT CGI->new->header(-charset=>'UTF-8').$json;
        },
    );
    return \%test;
}
1;


modedit Editiert von pq: skripte in more-tag gepackt
Last edited: 2014-07-10 14:02:52 +0200 (CEST)
10 print "Hallo"
20 goto 10

View full thread Hilfe bei charset und use utf8