Thread Best practice UTF-8 Output (35 answers)
Opened by bianca at 2013-11-29 07:03

bianca
 2013-12-14 17:58
#172590 #172590
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Habe 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.

Ergebnis:
Tests 1,2 und 4: Datei hat 89 Byte, überall fehlt das Euro-Zeichen, der Lister von Totalcommander zeigt mir für alle Dateien eine UTF-8 Codierung. An der Stelle des Euro-Zeichens zeigt der Hex-Editor im Totalcommander Lister Code 80 an.
Test 3: Datei hat 80 Byte, Euro-Zeichen ist da aber als Zeichensatz wird im Lister ANSI angezeigt.

Code:
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
#!/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);
}

Fragen:
Wie bekomme ich den Text inklusive Euro-Zeichen in UTF-8 gespeichert? Oder zeigt der Lister von Totalcommander mir das Ergebnis falsch an und das Euro-Zeichen ist tatsächlich da?
10 print "Hallo"
20 goto 10

View full thread Best practice UTF-8 Output