String Perl字符串编码UTF8
我正在阅读Perl的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函数(用于整数和单个字符之间的转换)可以
编码和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或其他来源。