Thread Hilfe bei charset und use utf8
(10 answers)
Opened by bianca at 2014-07-09 19:10
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 ![]() 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: 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 |