1

我正在阅读有关 PerlEncode和 utf8 的信息。

医生说:

$octets = encode_utf8($string);

相当于

$octets = 编码("utf8", $string) 。

$string 中的字符以 Perl 的内部格式编码,结果以八位字节序列的形式返回。

我不知道这是什么意思。无论如何,Perl 中的字符串不是八位位组(即字节)序列吗?

那么有什么区别:

$string$octets

4

1 回答 1

4

不,Perl 中的字符串是字符序列,不一定是八位字节。chrand函数(用于在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 来表示具有“宽”字符的字符串,但这并不是您通常需要担心的事情。

于 2013-06-20T15:10:34.260 回答