gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:17:50 27 4
gpt4 key购买 nike

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

最佳答案

length function 操作字符,而不是八位字节(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 的通用语言,如果您在任何地方使用它,它都会使事情变得更容易。

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

关于perl - Perl 中字符串的长度与字符编码无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5177192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com