如何使用 length() 函数计算 Unicode 字符的长度?

3

在 Moovweb SDK 中工作时,预期 length("çãêá") 返回 4,但实际返回 8。我该如何确保在使用 Unicode 字符时 length 函数能够正确工作?


请添加一个标签来指示你正在使用的编程语言。 - Keith Thompson
已添加最佳标签猜测。如有必要,请修正。 - Joey
为什么你需要让length("çãêá")返回4?它如何帮助任何事情? - Yakov Galka
2个回答

3

使用错误的字符集,经常会导致Unicode字符的一个常见问题是length()函数出错。要解决这个问题,您需要在调用 length()之前设置charset_determined变量以确保使用正确的字符集,就像在您的tritium代码中所示:

$charset_determined = "utf-8"
# your call to length() here

2
在Unicode中,字符串的长度或“字符数”并不存在。这一切都来自于ASCII的思想。
根据您的具体需求,可以选择以下之一:
- 对于光标移动、文本选择等操作,应使用字形簇。 - 对于限制输入字段、文件格式、协议或数据库中字符串长度,长度是以某种预定编码的代码单元衡量的。原因是任何长度限制都源自于较低级别的为该字符串分配的固定内存量,无论是在内存、磁盘还是特定数据结构中。
字符串在屏幕上显示的大小与字符串中的代码点数量无关。必须与渲染引擎进行通信才能确定其大小。即使在等宽字体和终端中,代码点也不占据一个列。POSIX考虑到了这一点。
更多信息请参见http://utf8everywhere.org

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接