Thread Frage zu Artikel 'Zeichenkodierungen oder „Warum funktionieren meine Umlaute nicht?”'
(6 answers)
Opened by bianca at 2013-12-16 10:27
Nachdem ich durch Best practice UTF-8 Output dem Thema Zeichencodierung ein wenig näher gekommen bin habe ich folgendes Testscript gebaut:
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 #!/usr/bin/perl -w use strict; use warnings; use CGI 3.48; use IO::Handle; STDOUT->autoflush(1); use Fcntl qw(:DEFAULT); use Encode qw(decode encode_utf8); (my $script = $0) =~ s/^.*[\\\/]//g; my $cgi = new CGI; my %work = ( chmod => ($^O =~ /mswin/i ? 0600 : 0666), speicher => 'test_utf_speicher.dat', endausgabe => 'test_utf_ausgabe.dat', ); # Verarbeitung if (defined $cgi->param('action') && $cgi->param('action') eq 'testinput') { $work{testtext} = $cgi->param('testtext'); # Zwischenspeichern sysopen($work{fh},$work{speicher},O_RDWR|O_CREAT,$work{chmod}) or die $!; binmode($work{fh}) or die $!; seek($work{fh},0,0) or die $!; print {$work{fh}} $work{testtext}; close($work{fh}); # wieder einlesen sysopen($work{fh},$work{speicher},O_RDWR|O_CREAT,$work{chmod}) or die $!; binmode($work{fh}) or die $!; seek($work{fh},0,0) or die $!; undef local $/; $work{eingelesen} = readline(scalar($work{fh})); close($work{fh}); # als UTF-8 ausgeben $work{utf8} = encode_utf8(decode("iso-8859-15",$work{eingelesen})); open $work{fh},'>',$work{endausgabe} or die $!; print {$work{fh}} $work{utf8}; close($work{fh}); $work{ausgabe} = <<__HTML__ <pre> Eingegeben wurde : "$work{testtext}" Wieder eingelesen wurde: "$work{eingelesen}" </pre> <form action="$script" method="post"> <input type="submit" value="Nochmal neu"> </form> __HTML__ ; } else { $work{ausgabe} = <<__HTML__ <form action="$script" method="post"> <input type="hidden" name="action" value="testinput"> <input type="text" name="testtext" value=""> <input type="submit" value="Start"> </form> __HTML__ ; } # Ausgabe print STDOUT $cgi->new->header(-charset=>'ISO-8859-15').<<__HTML__ <!DOCTYPE HTML> <html> <head> <title>Test UTF</title> <meta http-equiv="content-type" content="text/html;charset=ISO-8859-15"> </head> <body> $work{ausgabe} </body> </html> __HTML__ ; Das klappt auch auf Windows+Linux wunderbar. In dem erwähnten Artikel steht weiter unten Quote Wenn ich mir mein Script so anschaue denke ich, dass ich hier ISO-8859-15 übertrage. Dem Artikel zufolge dürfte das aber nicht klappen, weil CGI nur UTF-8 unterstützt. Habe ich das falsch verstanden oder habe ich woanders einen Irrtum? modedit Editiert von GwenDragon: Titel geändert, Link zu Artikel Last edited: 2013-12-16 14:38:14 +0100 (CET) 10 print "Hallo"
20 goto 10 |