Perl中的字符串长度,与字符编码无关

Perl中的字符串长度,与字符编码无关,第1张

概述长度函数假定中文字符不止一个字符.如何在Perl中确定字符串的长度而不依赖于字符编码(将中文字符视为一个字符)? length函数对字符进行 *** 作,而不是八位字节(AKA字节).字符的定义取决于编码.中文字符仍然是单个字符(如果编码设置正确!)但它们占用的空间超过一个八位字节.因此,Perl中字符串的长度取决于Perl认为该字符串所在的字符编码;唯一与字符编码无关的字符串长度是简单字节长度. 确保有 长度函数假定中文字符不止一个字符.如何在Perl中确定字符串的长度而不依赖于字符编码(将中文字符视为一个字符)?解决方法 length函数对字符进行 *** 作,而不是八位字节(AKA字节).字符的定义取决于编码.中文字符仍然是单个字符(如果编码设置正确!)但它们占用的空间超过一个八位字节.因此,Perl中字符串的长度取决于Perl认为该字符串所在的字符编码;唯一与字符编码无关的字符串长度是简单字节长度.

确保有问题的字符串标记为UTF-8并以UTF-8编码.例如,这产生3:

$perl -e 'print length("长")'

而这产生1:

$perl -e 'use utf8; print length("长")'

同样如下:

$perl -e 'use Encode; print length(Encode::decode("utf-8","长"))'

如果您从文件中获取中文字符,请确保在读取或写入之前将文件binmode $fh,’:utf8′;如果您从数据库获取数据,请确保数据库以UTF-8格式返回字符串(或使用Encode为您执行此 *** 作).

我不认为你必须拥有UTF-8中的所有东西,你真的只需要确保字符串被标记为具有正确的编码.我会使用UTF-8从前到后(甚至是横向),但因为它是Unicode的通用语言,如果你在任何地方使用它都会让事情变得更容易.

如果您打算处理非ASCII数据,您可能需要花一些时间阅读perlunicode手册页.

总结

以上是内存溢出为你收集整理的Perl中的字符串长度,与字符编码无关全部内容,希望文章能够帮你解决Perl中的字符串长度,与字符编码无关所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1245264.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存