/ 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
Encode til utf8 :-(
Fra : Tom


Dato : 24-11-06 16:32

Jeg forsøger at tage en ISO8859-1 streng og lave om til UTF-8.
Resultatet kan ses nedenfor [1] og koden [2] ligeså.

Hvad pokker gør jeg galt?

Og er det ikke meningen, at UTF-8 strenge ikke berøres af endnu en tur i
maskinen?

Jeg har også forsøgt med en "use utf8; no utf8" med præcis samme resultat.

Gode forslag?



[1]
æøåÆØÅ
NOT UTF8
æøåÃÃÃ

NOT UTF8
æøÃÂ¥ÃÂÃÂÃÂ

NOT UTF8
ÃÂæÃÂøÃÂÃÂ¥ÃÂÃÂÃÂÃÂÃÂÃÂ

NOT UTF8
ÃÂÃÂÃÂæÃÂÃÂÃÂøÃÂÃÂÃÂÃÂ¥ÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂ

NOT UTF8
ÃÂÃÂÃÂÃÂÃÂÃÂÃÂæÃÂÃÂÃÂÃÂÃÂÃÂÃÂøÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂ¥ÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂÃÂ


[2]
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

use Encode;


my $pass = 'æøåÆØÅ';
warn $pass ."\n";

for (1...5)
{
if (Encode::is_utf8($pass))
{
warn "Already UTF8\n";
}
else
{
warn "NOT UTF8\n";
}

$pass = encode("utf8", $pass);
warn $pass ."\n";
}



 
 
Peter Mogensen (06-01-2007)
Kommentar
Fra : Peter Mogensen


Dato : 06-01-07 19:22

Tom wrote:
> Jeg forsøger at tage en ISO8859-1 streng og lave om til UTF-8.
> Resultatet kan ses nedenfor [1] og koden [2] ligeså.
>
> Hvad pokker gør jeg galt?

Du har sikkert ikke læst denne glimrende forklaring på UTF-8 magi'en i
Perl :)
http://www.ahinea.com/en/tech/perl-unicode-struggle.html

Perl holder styr på om hver enkelt streng er chars (UTF-8) eller bytes,
og den holder også styr på hvad hvert enkelt filehandle forventer af
tegnsæt (via PerlIO layers).
Hvis du skriver en UTF-8 streng ud til et binært filehandle bliver det
konverteret. På samme måde, hvis du har en UTF-8 streng som Perl ikke
ved er UTF-8 og du skriver den ud til et binært filehandle (som f.eks.
STDOUT default), så bliver det IKKE konverteret - hvilket i en alm.
UTF_8 terminal ser helt rigtigt ud.
.... det er det bare ikke :) - for Perl aner ikke hvad der er sket.

Hvis du vil være sikker på hvad Perl ved om dine strenge, så skal
Data::Dumper vise strengen "æ" som "\x{e6}";

btw: Dit eksempel giver ikke mening før vi ved hvilket tegnsæt din
editor gemmer filen i.


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