用Perl解码UTF-8URL
考虑:用Perl解码UTF-8URL,perl,decode,encode,Perl,Decode,Encode,考虑: use URI::Escape; print uri_unescape("%C3%B3"); 产量:195立方米 用这个解码 产出:10 这是预期的结果 我应该使用什么Perl库来获得正确的输出?如果您知道字节序列是,请使用Encode::decode: use Encode; use URI::Escape; my $in = "%C3%B3"; my $text = Encode::decode('utf8', uri_unescape($in)); print length(
use URI::Escape;
print uri_unescape("%C3%B3");
产量:195立方米
用这个解码
产出:10
这是预期的结果
我应该使用什么Perl库来获得正确的输出?如果您知道字节序列是,请使用
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
代码
Encode::decode('utf8',uri_unescape($in))
对我不起作用,但是下面的代码很好
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;
}
这段代码来自嗨,谢谢你的回复,我很难理解,什么是字节序列?为什么需要应用解码功能?我的意思是为什么uri_unescape不够?@William uri包含转义字节:
0xC3
和0xB3
。在您为字节指定意义之前,字节没有意义。如果每个字节包含一个字符,则会得到这些奇怪的字符。如果这两个字节组合表示一个字符,则得到ó
。URI::Escape
模块不知道为这些字节分配什么含义。这是您、程序员或定义良好的protocoll(比较HTTP请求中包含内容编码
元数据的ASCII头)的任务。所有的Unicode编码都必须是多字节编码,因为有大量的字符。这就是为什么我在回答前加上“如果你知道字节序列是utf-8,…”的原因。也有可能这些字节是utf-16流的一部分,在这种情况下,你需要用“utf-16”而不是“utf-8”来解码。为了确保这一点,您需要询问创建这些字节的人如何解释这些字节。