Perl 中确定一个值是字节序列还是编码字符串的标准测试是什么?如果它是一个编码字符串,它是什么字符编码?
让我们假设以下完整的 Perl 脚本:
'foo';
如何确定这个文字字符串是字节序列还是某种编码的字符串?如果它是某种字符编码的字符串,它是什么字符编码?
这个问题与 Unicode 或 UTF-8 无关。通常是关于 Perl 中的字节与字符。这个问题也不是关于自动字符编码检测,这完全是一个不同的话题。
更新
初始化后$letter
,我希望 Perl 告诉我它认为存储在变量中的字母在什么字符编码$letter
中。我不希望它一定是正确的。确保 Perl 理解字母的编码字符是我作为程序员的责任。我明白了。但是应该有一个简单的方法来测试 Perl 认为一个字符(或字符串)在什么字符编码中。不是吗?
C:\>perl -E "$letter = 'Ž'; say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>perl -MEncode -E "$letter = decode('UTF-8', 'Ž'); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>perl -MEncode -E "$letter = decode('Windows-1252', 'Ž'); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
matches
C:\>perl -MEncode -E "$letter = decode('Windows-1252', 'Ž'); $letter = encode('Windows-1252', $letter); say $letter =~ m/\w/ ? 'matches' : 'does not match'"
does not match
C:\>chcp
Active code page: 1252
C:\>
Perl 不能按需报告它理解(正确或错误)存储的值的字符编码$letter
是什么?