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