我需要获取文本变量的第一个字符。以下是实现此操作的简单方法之一:
string.sub(someText,1,1)
或者
someText:sub(1,1)
如果我执行以下操作,我希望得到
'ñ'
作为第一个字母。然而,任何一个 sub
方法的结果都是 'Ã'
。local someText = 'ñññññññ'
print('Test whole: '..someText)
print('first char: '..someText:sub(1,1))
print('first char with .sub: '..string.sub(someText,1,1))
这是控制台的结果:
2014-03-02 09:08:47.959 Corona Simulator[1701:507] Test whole: ñññññññ
2014-03-02 09:08:47.960 Corona Simulator[1701:507] first char: Ã
2014-03-02 09:08:47.960 Corona Simulator[1701:507] first char with .sub: Ã
看起来
string.sub()
函数对返回的值进行了UTF-8编码。我尝试使用 Corona SDK 提供的 utf8_decode()
函数,但并没有成功。模拟器显示该函数期望得到一个数字,但得到了 nil
。我还在网上搜索了一下,看看是否有其他人遇到过这个问题。我发现Lua、Corona、Unicode和UTF-8有很多讨论,但没有找到任何可以解决这个具体问题的内容。
string.sub
函数将返回值编码为UTF-8”—只有在源数据编码为UTF-8的情况下才会出现这种情况。没有标准的Lua库会更改编码方式。无论如何,你必须确保了解所有处理的字符串数据的字符集和编码方式(尽管通常只需知道它是系统默认值即可)。 - Tom Blodget