6

我正在尝试在 lua 中将一些法语文本转换为大写,它没有转换重音字符。知道为什么吗?

测试脚本:

print('échelle')
print(string.upper('échelle'))
print('ÉCHELLE')
print(string.lower('ÉCHELLE'))

输出:

Échelle
ÉCHELLE
ÉCHELLE
Échelle

4

4 回答 4

4

这可能有点矫枉过正,但您可以使用slnunicode(在 LuaRocks 中可用)来做到这一点。

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

您可能需要使用unicode.ascii.upperunicode.latin1.upper取决于源文件的编码。

于 2012-07-20T03:02:00.050 回答
3

您需要设置合适的语言环境,这取决于这些字符串在源代码中的编码方式。由于您提供的输出,您似乎正在使用 Latin 1。在这种情况下,请尝试在脚本顶部添加以下行:

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

此名称适用于 Mac OS X。对于 Linux,请尝试

os.setlocale("fr_FR.iso88591")

如果您使用的是 UTF,那么设置语言环境将无济于事,因为string.lower一次将字符串转换一个字节。

于 2012-07-20T11:12:29.317 回答
0

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

有一些 Lua 库添加了不同程度的 Unicode 支持。因此,您将不得不使用其中之一。

于 2012-07-20T06:32:16.070 回答
0

Lua 只使用 C 库函数toupper,AFAIK不支持重音字符。你需要自己为此编写一个例程。

于 2012-07-20T02:47:54.243 回答