在Perl中解码UTF-8 URL

Wil*_*iam 6 perl encode decode

考虑:

use URI::Escape;
print uri_unescape("%C3%B3");
Run Code Online (Sandbox Code Playgroud)

输出:³

用这个http://meyerweb.com/eric/tools/dencoder/解码

输出:ó

这是预期的.

我应该用什么Perl库来获得正确的输出?

Eri*_*ikR 11

如果您知道字节序列是UTF-8,那么使用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
Run Code Online (Sandbox Code Playgroud)

  • @William URI包含转义*字节*:`0xC3`和`0xB3`.在为它们分配含义之前,字节没有任何意义.如果每个字节包含一个字符,则会得到这些奇怪的字符.如果这两个字节组合符号化*一个*字符,你得到你的`ó`.`URI :: Escape`模块不知道分配给这些字节的含义.这是您,程序员或定义良好的协议的任务(比较包含"Content-encoding"元数据的HTTP请求中的ASCII头).所有Unicode编码都必须是*多字节编码*,因为存在大量字符. (2认同)