String Perl字符串编码UTF8

String Perl字符串编码UTF8,string,perl,utf-8,encode,String,Perl,Utf 8,Encode,我正在阅读Perl的编码和utf8 医生说: $octets=encode_utf8($string) 相当于 $octets=encode(“utf8”,$string) $string中的字符以Perl的内部格式编码,并且 结果以八位字节序列的形式返回 我不知道这意味着什么。Perl中的字符串不是八位字节(即字节)序列吗 那么,两者之间的区别是什么: $string和$octets 不,Perl中的字符串是一个字符序列,不一定是八位字节。chr和ord函数(用于整数和单个字符之间的转换)可以

我正在阅读Perl的
编码和utf8

医生说:

$octets=encode_utf8($string)

相当于

$octets=encode(“utf8”,$string)

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

我不知道这意味着什么。Perl中的字符串不是八位字节(即字节)序列吗

那么,两者之间的区别是什么:


$string
$octets

不,Perl中的字符串是一个字符序列,不一定是八位字节。
chr
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来表示带有“宽”字符的字符串,但这不是您通常需要担心的事情。

不,perl中的字符串是一个字符序列,不一定是八位组。
chr
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来表示带有“宽”字符的字符串,但这不是您通常需要担心的事情。

什么是
\x{0421}
意思?
\x{0421}
是编码为十六进制数0x421的字符。这显然是“西里尔字母大写字母ES”(请参阅),那么为什么不
解码
,而不是在这里编码以解码为Perl字符呢?“UTF-8字符”不是一个东西。有Unicode代码点(0-0x10FFFF)和UTF-8编码,它将所有Unicode代码点表示为一个或多个八位字节(字节)。当您使用
substr
chop
split
、正则表达式或任何其他作用于字符串的Perl功能时,您正在处理字符。。。。您不必关心这些字符最初是否来自UTF-8或拉丁语-1或任何来源。
\x{0421}
是什么意思?
\x{0421}
是编码为十六进制数0x421的字符。这显然是“西里尔字母大写字母ES”(请参阅),那么为什么不
解码
,而不是在这里编码以解码为Perl字符呢?“UTF-8字符”不是一个东西。有Unicode代码点(0-0x10FFFF)和UTF-8编码,它将所有Unicode代码点表示为一个或多个八位字节(字节)。当您使用
substr
chop
split
、正则表达式或任何其他作用于字符串的Perl功能时,您正在处理字符。。。。你不必在意这些字符最初是否来自UTF-8或拉丁语-1或其他来源。