Thread Encoding, Umlaute, ... (19 answers)
Opened by roli at 2015-07-10 14:04

roli
 2015-07-13 11:48
#181550 #181550
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hi Raubtier,

eigentlich dachte ich, das ich es endlich verstanden hätte, leider ist es nicht so :-(
Den Artikel habe ich gelesen.
Auf einem Windows Rechner schaffe ich es einfach nicht "ÄÖÜßäöü" + das Euro Zeichen sowohl in der Dos-Box als auch einer Datei auszugeben.
Was ich meine verstanden zu haben:
Ein "use utf8" im Script bedeutet, das der Perl Interpreter alle Stings die im Script stehen als UTF8 Strings ansieht, dazu muß dann die Script Datei auch mit UTF8 Encoding gespeichert sein. Was mache ich hier auf Windows, ein "use cp1252" gibt es nicht?
Folgendes Script ist mit Encoding "Windows-1252" gespeichert:
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
use Modern::Perl '2015';
use Encode qw( encode decode );
#use utf8;

my $encoding = $^O eq 'MSWin32' ? 'cp1252' : 'utf8';
#$encoding = 'Windows-1252';
#$encoding = 'cp1252';
#$encoding = 'utf8';

say "Encoding: $encoding <";

binmode(STDOUT, ":encoding($encoding)" );
binmode(STDERR, ":encoding($encoding)" );
binmode(STDIN,  ":encoding($encoding)" );

# each open() automatically uses :encoding($encoding)
use open ':encoding($encoding)';

my $res_file = "erg_1252.txt";
open(my $fh, ">:encoding($encoding)", $res_file)
        or die "Could not open file '$res_file'";

my $eur = decode("$encoding", "€");
my $uml = decode("$encoding", "äöüßÄÖÜ");

say $fh "Umlaute: äöüßÄÖÜ";
say $fh "Euro: €";
say $fh "decodiert";
say $fh "Uml: $uml";
say $fh "Eur: $eur";

say "\nNicht decodiert";
say "Umlaute: äöüßÄÖÜ";
say "Euro: €";
say "\ndecodiert";
say "Uml: $uml";
say "Eur: $eur";

close $fh;

In der Dos Box, zuvor mit chcp 1252 zur Sicherheit die Codepage nochmal gewählt, sehe ich folgendes:
Konsole output

In der Ausgabedatei erg_1252.txt sehe: Datei inhalt
Die erg_1252.txt Datei hat laut Notepad++ das 1252 Encoding, wenigstens das habe ich geschafft.

Unter Linux habe ich kein Problem, das System läuft mit utf8, meine Perl Scripte sind als utf8 gespeichert, und im Script verwende ich "use utf8".

<Update>Wenn ich das Script unter der Überschrift "Die Arbeitsumgebung testen" aus dem perlgeek Artikel hier ausführe, wird KEINE Zeile korrekt angezeigt. Egal ob das Script als UTF8 oder 1252 gespeichert ist, und egal welche Codepage in der Konsole aktiv ist. Ich habe auch die Liste der Encodings mal um cp850 und cp1252 erweitert.</Update>

Danke
Last edited: 2015-07-13 11:54:29 +0200 (CEST)
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2

View full thread Encoding, Umlaute, ...