繁体   English   中英

关于“utf-8”行为的问题

[英]Question about the “utf-8”-behavior

#!/usr/bin/env perl
use warnings;
use 5.012;
use Encode qw(encode);

no warnings qw(utf8);

my $c = "\x{ffff}";

my $utf_8 = encode( 'utf-8', $c );
my $utf8 = encode( 'utf8', $c );

say "utf-8 :  @{[ unpack '(B8)*', $utf_8 ]}";
say "utf8  :  @{[ unpack '(B8)*', $utf8 ]}";

# utf-8 :  11101111 10111111 10111101
# utf8  :  11101111 10111111 10111111

“utf-8”是否以这种方式编码,将我的代码点自动修复到最后一个可互换的代码点(第一个平面)?

请参阅Encode文档的UTF-8与utf8与UTF8部分

总而言之,Perl有两种​​不同的UTF-8编码。 它的本机编码称为utf8 ,并且基本上允许任何代码点,无论Unicode标准对该代码点的描述如何。

另一种编码叫做utf-8 (又名utf-8-strict )。 这仅允许由Unicode标准分配的代码点。

根据Unicode, \\x{FFFF}不是有效的代码点。 但是Perl的utf8编码并不关心这一点。

默认情况下, encode函数用替换字符替换目标字符集中不存在的任何字符(请参阅处理格式错误的数据部分 )。 对于utf-8 ,该替换字符是U + FFFD(REPLACEMENT CHARACTER) ,其以UTF-8编码为11101111 10111111 10111101(二进制)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM