/ / Dekodowanie adresu URL utf-8 w Perlu - perl, dekodowanie, kodowanie

Dekodowanie adresu URL utf-8 w Perlu - perl, dekodowanie, kodowanie

Rozważać:

use URI::Escape;
print uri_unescape("%C3%B3");

Wyjście: ό

Dekoduj z tym http://meyerweb.com/eric/tools/dencoder/

Wynik: ó

Jest to oczekiwana.

Jakiej biblioteki Perla powinienem użyć, aby uzyskać prawidłowe wyniki?

Odpowiedzi:

11 dla odpowiedzi nr 1

Jeśli wiesz, że sekwencja bajtów jest utf-8, a następnie użyj Encode::decode:

use Encode;
use URI::Escape;

my $in = "%C3%B3";
my $text = Encode::decode("utf8", uri_unescape($in));

print length($text);    # Should print 1

0 dla odpowiedzi nr 2

Kod Encode::decode("utf8", uri_unescape($in)) nie działa dla mnie, ale poniższy kod działa dobrze.

sub smartdecode {
use URI::Escape qw( uri_unescape );
use utf8;
my $x = my $y = uri_unescape($_[0]);
return $x if utf8::decode($x);
return $y;
}

Ten kod pochodzi z http://lwp.interglacial.com/ch05_02.htm