lua中的string.upper无法处理带重音符号的字符?

我正在尝试在lua中将一些法语文本转换为大写,但它没有转换重音字符。有任何想法吗?

测试脚本:

print('échelle')

print(string.upper('échelle'))

print('ÉCHELLE')

print(string.lower('ÉCHELLE'))

输出:

échelle

éCHELLE

ÉCHELLE

Échelle
点赞
用户501459
用户501459

Lua 只是使用 C 库函数 toupper,据我所知,它不支持带重音的字符。你需要自己编写一个程序来处理这个问题。

2012-07-20 02:47:54
用户1516484
用户1516484

这可能有些过头,但你可以使用slnunicode(可在LuaRocks中获取)进行操作。

require "unicode"
print(unicode.utf8.upper("échelle"))
-- ÉCHELLE

根据源文件的编码,你可能需要使用unicode.ascii.upperunicode.latin1.upper

2012-07-20 03:02:00
用户734069
用户734069

为了更有效地解释这个问题,Lua 没有内置非 ASCII 字符串的支持。你可以存储一个 Latin-1 或 UTF-8 编码字符串,但是任何非 ASCII 字符都不能使用特殊的字符串操作函数(upperlower等)。

有 Lua 库可以添加不同程度的 Unicode 支持。因此,你必须使用其中之一。

2012-07-20 06:32:16
用户107090
用户107090

你需要设置适当的区域设置,这取决于这些字符串在源代码中的编码方式。

根据你提供的输出,你似乎正在使用 Latin 1。

在这种情况下,尝试在你的脚本顶部添加以下行:

os.setlocale("fr_FR.ISO8859-1")

这个名称适用于 Mac OS X。对于 Linux,尝试使用:

os.setlocale("fr_FR.iso88591")

如果你正在使用 UTF,则设置区域设置无 法帮助,因为 string.lower 会逐个字节地转换字符串。

2012-07-20 11:12:29