/ Forside / Teknologi / Udvikling / Perl / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Perl
#NavnPoint
bjarneA 141
poul_from 50
soccer 30
Nicknack 14
Tmpj 0
UTF8 driller mig
Fra : Morten Guldager


Dato : 05-01-08 20:16

Hejsa,

Jeg kører ikke utf8 men mit program modtager noget utf8-data.
Altså var min tanke at konvertere det til ISO-8859-1

Perl har funktionen utf8::decode som ser fin ud, men den driller
mig pænt meget...

Det er som om den medfører at der opstår 2 versioner af min variabel.
Se her:

perl -e '$oe8 = "\xc3\xb8"; utf8::decode($oe8); print ord($oe8)."\n"; @l = unpack("C*", $oe8); print "@l\n"'

giver mig følgende output:
248
195 184

Forklaring: (som jeg tror/troede det virker)
- $oe8 tildeles 2 bytes som er et utf8 encodet ø
- utf8::decode konverterer $oe8 til ISO-8859-1
- print ord($oe8) printer 248 som er ISO-8859-1 værdien for ø
- unpack C* laver en byte-liste af hvad der måtte være i $oe8
- print @l printer listen

Men jeg fatter ikke hvordan $oe8 stadig _også_ kan indeholde de utf8
encodede tegn...

Nogen der kan forklare hvordan det hænger sammen?

Det hele foregår på en kubuntu-kasse, perl er version 5.8.8


/Morten

 
 
Jesper Krogh (05-01-2008)
Kommentar
Fra : Jesper Krogh


Dato : 05-01-08 20:40

I dk.edb.programmering.perl, skrev Morten Guldager:
> Perl har funktionen utf8::decode som ser fin ud, men den driller
> mig pænt meget...

Se på Text::Iconv

Jesper

--
../Jesper Krogh, jesper@krogh.cc, Jabber ID: jesper@jabbernet.dk


Michael Zedeler (08-01-2008)
Kommentar
Fra : Michael Zedeler


Dato : 08-01-08 10:42

Morten Guldager wrote:
> Jeg kører ikke utf8 men mit program modtager noget utf8-data.
> Altså var min tanke at konvertere det til ISO-8859-1
>
> Perl har funktionen utf8::decode som ser fin ud, men den driller
> mig pænt meget...
>
> Det er som om den medfører at der opstår 2 versioner af min variabel.
> Se her:
>
> perl -e '$oe8 = "\xc3\xb8"; utf8::decode($oe8); print ord($oe8)."\n"; @l = unpack("C*", $oe8); print "@l\n"'
>
> giver mig følgende output:
> 248
> 195 184

Det er vidst også helt efter bogen. Når du har fået perl til at "dekode"
utf-8 ligger det i perls interne encoding, som tilfældigvis er utf-8.
Den eneste forskel på strengen før og efter utf::decode er at perls
"dete er en intern, utf-8 encoded streng"-flag er blevet slået til
(decode checker også at strengen er konsistent).

Brug nu funktionen encode til at konvertere til ISO-8859-1. Jeg plejer
iøvrigt at bruge modulet Encode.

Mvh. Michael.

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste