打印UTF-8字符串中字符的数量

如何输出 UTF-8 字符串中的字符数?

例如:

local a = "Lua"
local u = "Луа"
print(a:len(), u:len())

输出:

3   6

原文链接 https://stackoverflow.com/questions/10097941

点赞
stackoverflow用户734069
stackoverflow用户734069

你不用这么做。

Lua 不支持 Unicode。它只看到一串字节的字符串。当你请求其长度时,它只会返回该字节字符串的长度。如果你想要使用 Lua 与 Unicode 字符串交互,你要么编写一个实现这些交互的 Lua 模块,要么下载这样的模块。

2012-04-11 00:16:08
stackoverflow用户416047
stackoverflow用户416047

另一个选择是包装本机操作系统的 UTF-8 字符串函数,并使用操作系统函数来执行繁重的工作。这取决于您使用的操作系统——我在 OSX 上做过这个,效果非常好。Windows 也会类似。当然,如果您只想从命令行运行脚本,这会开启另一个问题 - 这取决于您的应用。

另一个选择是包装本机操作系统的 UTF-8 字符串函数,并使用操作系统函数来执行繁重的工作。这取决于您使用的操作系统——我在 OSX 上做过这个,效果非常好。Windows 也会类似。当然,如果您只想从命令行运行脚本,这会开启另一个问题 - 这取决于您的应用。
2012-04-11 04:42:57
stackoverflow用户221509
stackoverflow用户221509

如果你需要在 Lua 中使用 Unicode/UTF-8,你需要使用外部库,因为 Lua 只能处理 8 位字符串。其中一个库是 slnunicode。下面是一个计算字符串长度的示例代码:

local unicode = require "unicode"
local utf8 = unicode.utf8

local a = "Lua"
local u = "Луа"
print(utf8.len(a), utf8.len(u)) --> 3    3
2012-04-11 07:33:53
stackoverflow用户1009479
stackoverflow用户1009479

在 Lua 5.3 版本中,可以使用 utf8.len 函数来获取 UTF-8 字符串的长度:

local a = "Lua"
local u = "Луа"
print(utf8.len(a), utf8.len(u))

输出结果为: 3 3

2015-01-14 11:40:39