Perl – XML a Unicode

DanG

Perl – XML a Unicode
« kdy: 18. 07. 2012, 14:55:34 »
Ahoj,
dělám v Perlu program, kde potřebuju zpracovat XML soubor se znaky Unicode. Program mi soubor zpracovává, řekl bych v pořádku. Stejně tak v pořádku zpracovává standardní vstup. Ale nějak to nejde do sebe. Příklad asi bude lepší.

pokus.xml
Kód: [Vybrat]
<soubor>
        <tag name="abc">
                <xyz/>
                <pqr/>
        </tag>
        <tag name="äbc">
                <xyz/>
                <pqr/>
        </tag>
</soubor>

pokus.pl:
Kód: [Vybrat]
use XML::Simple;
use utf8;
use encoding 'utf8';
$soubor = XMLin("pokus.xml");
print exists $soubor->{'tag'}->{'abc'} ? "Existuje položka abc\n" : "Neexistuje položka abc\n";
print exists $soubor->{'tag'}->{$ARGV[0]} ? "Existuje položka $ARGV[0]\n" : "Neexistuje položka $ARGV[0]\n";
print exists $soubor->{'tag'}->{'äbc'} ? "Existuje položka äbc\n" : "Neexistuje položka äbc\n";
print exists $soubor->{'tag'}->{$ARGV[1]} ? "Existuje položka $ARGV[1]\n" : "Neexistuje položka $ARGV[1]\n";

Po zadání
Kód: [Vybrat]
perl pokus.pl abc äbc mi to vyplivne
Kód: [Vybrat]
Existuje položka abc
Existuje položka abc
Existuje položka äbc
Neexistuje položka äbc

V terminálu mám nastaveno kódování utf-8, soubor je taky v utf-8, v programu používám utf-8, takže by to mělo být kompatibilní, nebo ne? Je potřeba ten standardní vstup nějak upravit?


Pavel

Re:Perl – XML a Unicode
« Odpověď #1 kdy: 18. 07. 2012, 16:43:37 »
Nebude ten problem v tom XMLin()?

The use of this module in new code is discouraged.

http://search.cpan.org/~grantm/XML-Simple-2.20/lib/XML/Simple.pm#STATUS_OF_THIS_MODULE

DanG

Re:Perl – XML a Unicode
« Odpověď #2 kdy: 18. 07. 2012, 17:14:14 »
No můžu zkusit nějaký jiný modul, ale nemyslím si, že by byla zrovna v tomto chyba. Když zadám jméno toho tagu přímo v programu, tak je přece vidět, že to funguje, problém nastane, pokud použiji jako vstup argumenty při spuštění programu. Stejně tak dám-li vypsat
Kód: [Vybrat]
keys $soubor->{'tag'}, tak mi vypíše oboje abc i äbc.

Zkusím použít to LibXML, co tam nabízejí.

DanG

Re:Perl – XML a Unicode
« Odpověď #3 kdy: 18. 07. 2012, 17:23:13 »
Dobrá, tak s LibXML se děje totéž, takže tam ta chyba opravdu nebyla.

wamba

Re:Perl – XML a Unicode
« Odpověď #4 kdy: 18. 07. 2012, 19:38:18 »
tohle by mohlo zabrat
Kód: [Vybrat]
say "není utf" unless utf8::is_utf8($ARGV[1]);
print exists $soubor->{'tag'}->{$ARGV[1]} ? "Existuje položka $ARGV[1]\n" : "Neexistuje položka $ARGV[1]\n";
utf8::decode($ARGV[1]);
say "je utf" if utf8::is_utf8($ARGV[1]);
print exists $soubor->{'tag'}->{$ARGV[1]} ? "Existuje položka $ARGV[1]\n" : "Neexistuje položka $ARGV[1]\n";



DanG

Re:Perl – XML a Unicode
« Odpověď #5 kdy: 18. 07. 2012, 20:14:44 »
Tak to skutečně nebylo utf. Díky za radu  :)