我正在尝试在 lua 中将一些法语文本转换为大写,它没有转换重音字符。知道为什么吗?
测试脚本:
print('échelle')
print(string.upper('échelle'))
print('ÉCHELLE')
print(string.lower('ÉCHELLE'))
输出:
Échelle
ÉCHELLE
ÉCHELLE
Échelle
我正在尝试在 lua 中将一些法语文本转换为大写,它没有转换重音字符。知道为什么吗?
测试脚本:
print('échelle')
print(string.upper('échelle'))
print('ÉCHELLE')
print(string.lower('ÉCHELLE'))
输出:
Échelle
ÉCHELLE
ÉCHELLE
Échelle
这可能有点矫枉过正,但您可以使用slnunicode(在 LuaRocks 中可用)来做到这一点。
require "unicode"
print(unicode.utf8.upper("échelle"))
-- ÉCHELLE
您可能需要使用unicode.ascii.upper
或unicode.latin1.upper
取决于源文件的编码。
您需要设置合适的语言环境,这取决于这些字符串在源代码中的编码方式。由于您提供的输出,您似乎正在使用 Latin 1。在这种情况下,请尝试在脚本顶部添加以下行:
os.setlocale("fr_FR.ISO8859-1")
此名称适用于 Mac OS X。对于 Linux,请尝试
os.setlocale("fr_FR.iso88591")
如果您使用的是 UTF,那么设置语言环境将无济于事,因为string.lower
一次将字符串转换一个字节。
为了更有效地解释这一点,Lua 没有对非 ASCII 字符串的内置支持。您可以存储 Latin-1 或 UTF-8 编码的字符串,但任何特殊的字符串操作函数(upper
、lower
等)都不适用于任何非 ASCII 字符。
有一些 Lua 库添加了不同程度的 Unicode 支持。因此,您将不得不使用其中之一。
Lua 只使用 C 库函数toupper
,AFAIK不支持重音字符。你需要自己为此编写一个例程。