lua string.upper不使用重音字符?

时间:2012-07-20 02:15:49

标签: lua

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

测试脚本:

  

打印( 'ECHELLE')
      打印(string.upper( 'ECHELLE'))
      打印( 'ECHELLE')
      print(string.lower('ÉCHELLE'))

输出:

  

ECHELLE
      阶梯
      阶梯
      Échelle

4 个答案:

答案 0 :(得分:3)

可能有点矫枉过正,但您可以使用slnunicode(在LuaRocks中可用)来执行此操作。

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

您可能需要使用unicode.ascii.upperunicode.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编码的字符串,但是任何特殊的字符串操作函数(upperlower等)都不适用于任何非ASCII字符。

有一些Lua库可以添加不同程度的Unicode支持。所以你必须使用其中一个。