首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl中独立于字符编码的字符串长度

问Perl中独立于字符编码的字符串长度
EN

Stack Overflow用户
提问于 2011-03-03 13:56:38
回答 1查看 2.8K关注 0票数 4

length函数假定中文字符多于一个字符。如何在Perl中独立于字符编码来确定字符串的长度(将中文字符视为一个字符)?

EN

回答 1

Stack Overflow用户

发布于 2011-03-03 14:20:20

length函数对字符进行操作,而不是对八位字节(也称为字节)进行操作。字符的定义取决于编码。中文字符仍然是单字符(如果编码设置正确!)但它们占用的空间不止一个八位位组。因此,Perl中字符串的长度取决于Perl认为字符串所在的字符编码;唯一独立于字符编码的字符串长度是简单字节长度。

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

代码语言:javascript
复制
$ perl -e 'print length("长")'

而这会产生1:

代码语言:javascript
复制
$ perl -e 'use utf8; print length("长")'

如下所示:

代码语言:javascript
复制
$ perl -e 'use Encode; print length(Encode::decode("utf-8", "长"))'

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

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

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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5177192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档