2013-12-01T14:39:12 topegWillst du da eine Kodierung setzen, musst du es mittels Encode machen.
use IO::File;
QuoteTrotzdem gibt Perl bei :raw in UTF-8 aus?
2013-12-02T08:25:41 biancaMoment! Es steht nichts in irgendeiner Datei. Das Script erzeugt die Daten erst und schreibt sie dann in eine Datei und die muss UTF-8 ohne BOM sein. Hat hier für diese Frage auch nichts mit STDOUT zu tun.
2013-12-02T10:31:02 bianca2013-12-02T08:33:20 rosti
Was gilt denn für Perl 5.10.1 ?
2013-12-02T11:45:13 GwenDragonKönntest du bitte deine Frage präzisieren? Was willst du eigentlich genau erreichen?
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
#!/usr/bin/perl use strict; use warnings; use diagnostics; use Fcntl qw(:DEFAULT); my $testtext = <<__TEST__ Hier ist ein Text mit allen Umlauten: öäüß und groß: ÖÄÜ Das Euro-Zeichen: € __TEST__ ; my $lauf = 0; { # Test 1 biancas Versuch $lauf ++; sysopen(my $fh,"test$lauf.txt",O_RDWR|O_CREAT,0666) or die $!; binmode($fh,':utf8') or die $!; undef local $/; print $fh $testtext; close($fh); } { # Test 2 topeg https://www.perl-community.de/bat/poard/message/172298 $lauf ++; open(my $fh, '>:encoding(UTF-8)',"test$lauf.txt") or die $!; undef local $/; print $fh $testtext; close($fh); } { # Test 3 rosti https://www.perl-community.de/bat/poard/message/172353 $lauf ++; use IO::File; my $fh = new IO::File "> test$lauf.txt"; print $fh $testtext; $fh->close; } { # Test 4 GwenDragon https://www.perl-community.de/bat/poard/message/172366 $lauf ++; open my $fh, '>', "test$lauf.txt"; binmode $fh, ':encoding(UTF-8)'; print $fh $testtext; close($fh); }
2013-12-14T16:58:17 biancaHabe mal alle 4 Vorschläge getestet.
Testumgebung:
Win7 32 Bit, Perl 5.16.3, u.a. Script mit Notepad ++ in der Kodierung ANSI erstellt und gespeichert.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
use 5.010; use utf8; # wichtig; use strict; use warnings; use autodie; open my $OUT, '>:encoding(UTF-8)', 'test.txt'; print $OUT <<EOF; Hier ist ein Text mit allen Umlauten: öäüß und groß: ÖÄÜ Das Euro-Zeichen: € EOF close $OUT;
2013-12-14T20:09:50 moritzuse utf8; # wichtig;
2013-12-02T11:49:25 biancaSo ein Durcheinander? Vielleicht auch noch Latin9 (ISO-8559-15) dazu? Du hast also einen Sourcecode, der Windows-1252 (was von Windowslern "ANSI" genannt wird) ist, Benutzeringaben die Latin1/9 (ISO-8559-1/15) sind? Und die sollen UTF-8 gespeichert werden?Auch das Script selbst ist in ANSI gespeichert im Notepad++.
Es kann aber sein, dass z.B. Umlaute aus Benutzereingaben oder anderen Dateien (alle in latin1) hinein kommen. Und die Datei muss UTF-8 sein,
2013-12-15T09:11:43 GwenDragonVielleicht auch noch Latin9 (ISO-8559-15) dazu?
2013-12-15T09:11:43 GwenDragonDu hast also einen Sourcecode, der Windows-1252 (was von Windowslern "ANSI" genannt wird) ist, Benutzeringaben die Latin1/9 (ISO-8559-1/15) sind? Und die sollen UTF-8 gespeichert werden?
1 2 3
my $data = encode_utf8 decode "windows-1252", $testtext; open my $fh, ">", "bla.txt" or die $!; print $fh $data;
2013-12-15T13:47:34 pqEncode wurde mehrere Male in diesem Thread erwähnt.
2013-12-15T13:47:34 pqAusserdem wird es in moritz' weiter oben verlinktem Artikel beschrieben, was mich folgern lässt, dass du ihn nicht gelesen hast. (Was mich aber jetzt auch wieder nicht richtig überrascht.)
2013-12-15T17:14:00 bianca2013-12-15T13:47:34 pqEncode wurde mehrere Male in diesem Thread erwähnt.
Aber in einer für meine Frage funktionsfähigen Kombination von dir das erste mal.
2013-12-15T17:37:25 RaubtierDer Artikel von Moritz ist sehr gut, vielleicht solltest du dann mal genauer nachfragen, was dir daran unklar ist.
2013-12-15T17:37:25 RaubtierDann vermeidest du vielleicht zukünftig Probleme dieser Art.
2013-12-15T17:37:25 RaubtierDas ist bei mir auch Praxis.Es gab schon so viele Threads - und die Kombination ist immer gleich:
1. mit decode von irgendeiner Kodierung in Perl interne Darstellung umwandeln
2. mit encode in die gewünschte Zielkodierung wandeln
2013-12-16T10:50:13 GwenDragonDas ist bei mir auch Praxis.