我正在阅读有关 PerlEncode
和 utf8 的信息。
医生说:
$octets = encode_utf8($string);
相当于
$octets = 编码("utf8", $string) 。
$string 中的字符以 Perl 的内部格式编码,结果以八位字节序列的形式返回。
我不知道这是什么意思。无论如何,Perl 中的字符串不是八位位组(即字节)序列吗?
那么有什么区别:
$string
和$octets
?
不,Perl 中的字符串是字符序列,不一定是八位字节。chr
and函数(用于在ord
整数和单个字符之间进行转换),仅举两个例子,可以处理大于 255 的整数值。例如
$string = "\x{0421}\x{041F}";
print ord($_)," " for split //, $string;
输出
1057 1055
但是,当将字符串写入终端、文件或其他输出流时,接收字符串的设备通常需要并期望字节,因此这就是编码的用武之地。如您所见,UTF-8 是一种编码方案0x7F-0x10FFFF 范围内的单个值转换为多个字节。
$octets = Encode::encode("utf-8", "\x{0421}\x{041F}");
print ord($_)," " for split //, $octets;
现在输出是
208 161 208 159
并且适合存储在文件系统上。
在内部,perl
(在所有小写字母中,这是指 Perl 的可执行实现,编程语言规范)通常使用 UTF-8 来表示具有“宽”字符的字符串,但这并不是您通常需要担心的事情。