Thread Encoding - Wie funktioniert das? (16 answers)
Opened by giordano at 2013-12-04 11:11

giordano
 2013-12-04 11:11
#172430 #172430
User since
2011-04-29
16 Artikel
BenutzerIn
[default_avatar]
Hallo,

Ich habe mich durchgelesen ins encoding und konnte für mein Problem keine Lösung finden. Ich muss auch gestehen, dass ich das nicht trivial finde und eigentlich immer noch nicht verstehe.
Grundsätzlich möchte ich die ersten 100 Zeilen eines xml files, das angeblich mit utf-16 codiert ist, herauslesen. Grund: das File ist zu gross und ich möchte Einblick in die ersten Zeile erhalten. Den Code den ich verwende:

Code: (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
use warnings;
use strict;
use Encode qw(encode decode);
use Cwd;


my $enc = 'UTF-16';
my $dir0 = getcwd;
my $file = "x.xml";

open INPUT, "<:encoding($enc)", "$dir0/$file" or die "File $file not found!";
open OUTPUT, ">$dir0/first100_$file" or die "File first100_$file not found!";
open STDERR, ">results_error.log" or die "Can't open log";

my $i = 0;
while (<INPUT>) {
if ( $i < 100 ) {
print OUTPUT $_; # (1)
# print OUTPUT decode($enc,$_); # (2)
# print OUTPUT encode($enc,$_); # (3)
$i++;
}
}

close INPUT;
close OUTPUT;
close STDERR;


Ich habe die verschiedenen Szenarien durchgespielt, weil mir nicht klar ist, wie wo was codiert ist. Hier die Resultate:

------------------------------
x.xml-file:

<?xml version="1.0" encoding="utf-16"?>

<meldung><konsultation><konsdate>2010-03-17</konsdate><patid>11205</patid><patyear>1970</patyear><patgender>male</patgender><arzt>7601000238436</arzt><diagnose><icpc>P06</icpc></diagnose></konsul
.....

-- (1) --
print OUTPUT $_;

output:
㰿硭氠癥牳楯渽∱⸰∠敮捯摩

log:
leer

-- (2) --
print OUTPUT decode($enc,$_);

output:
leer

log:
UTF-16:Unrecognised BOM 3c3f at C:/strawberry/perl/lib/Encode.pm line 176, <INPUT> line 1.

-- (3) --
print OUTPUT encode($enc,$_);

output:
<?xml version="1.0" encoding="utf-16"?>

૾＀㰀洀攀氀搀甀渀最㸀㰀欀漀
渀猀甀氀琀愀琀椀漀渀㸀㰀欀漀渀猀搀愀琀攀㸀㈀ ㄀ ⴀ ㌀ⴀ㄀㜀㰀⼀欀漀渀
猀搀愀琀攀㸀㰀瀀愀琀椀搀㸀㄀㄀㈀ 㔀㰀⼀瀀愀琀椀搀㸀㰀瀀愀琀礀攀愀爀㸀
㄀㤀㜀 㰀⼀瀀愀琀礀攀愀爀㸀

log:
leer
------------------------------

Mir ist nicht klar, was da abläuft. Entweder ist der Output leer oder es erscheinen chinesischen Zeichen.
Vielleicht kann mir jemand einen Hinweis geben.
Besten Dank
giordano

View full thread Encoding - Wie funktioniert das?