Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Perl解码UTF-8URL_Perl_Decode_Encode - Fatal编程技术网

用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”来解码。为了确保这一点,您需要询问创建这些字节的人如何解释这些字节。