长度函数假设汉字超过一个字符。如何在 Perl 中独立于字符编码确定字符串的长度(将中文字符视为一个字符)?
The length http://perldoc.perl.org/functions/length.html函数对字符进行操作,而不是八位字节(也称为字节)。字符的定义取决于编码。汉字仍然是单个字符(如果编码设置正确!),但它们占用超过一个八位字节的空间。因此,Perl 中字符串的长度取决于 Perl 认为该字符串采用的字符编码;唯一与字符编码无关的字符串长度是简单字节长度。
确保相关字符串被标记为 UTF-8 并以 UTF-8 编码。例如,这会产生 3:
$ perl -e 'print length("长")'
而这会产生 1:
$ perl -e 'use utf8; print length("长")'
as does:
$ perl -e 'use Encode; print length(Encode::decode("utf-8", "长"))'
如果您要从文件中获取中文字符,请确保binmode $fh, ':utf8'
在读取或写入文件之前;如果您从数据库获取数据,请确保数据库返回 UTF-8 格式的字符串(或使用Encode http://search.cpan.org/dist/Encode/为你做)。
我认为您不必拥有 UTF-8 格式的所有内容,您实际上只需要确保该字符串被标记为具有正确的编码。我会从前到后(甚至从侧面)使用 UTF-8,因为这是 Unicode 的通用语言,如果你在任何地方都使用它,事情会变得更容易。
您可能想花一些时间阅读佩鲁尼码 http://perldoc.perl.org/perlunicode.html如果您要处理非 ASCII 数据,请参阅手册页。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)