1

在 Lua 中,对于 iPad Corona 项目,我正在使用 network.request 请求一个 UTF-8 服务器文本文件(包含中文字符),但是在控制台或应用程序中显示的结果显示为“垃圾”。例如,谷歌浏览器可以很好地显示相同的 UTF-8 页面,因为我在服务器将这个(使用 PHP)发送到 'Content-Type: text/plain; 时设置了 http 标头;charset=utf-8' (也没有BOM,字节顺序标记)。我在 Lua 中看到的“垃圾”看起来类似于我使用选项菜单“强制”Chrome 将页面呈现为 ISO-8859-1 时。

有没有人有任何帮助或指示?如果一切都失败了,我将如何将“垃圾”字符串转换回 Lua 中的 UTF-8 来源?

谢谢你的帮助!

4

3 回答 3

5

Lua 对 UTF-8 一无所知。Lua 字符串只是字节序列。听起来 Corona 本身正在将字符串解析为 ISO8859-1。最可能的原因是他们做了一些非常愚蠢和幼稚的事情,比如将字符串的每个字节都视为 Unicode 代码点。

恐怕我不知道 Corona,所以不能提供任何具体的解决方案,但我建议看看它有哪些涉及编码的功能 --- 可能有一个特定的功能来渲染一个带有例如,特定的编码。

于 2011-03-01T13:39:57.147 回答
0

你能显示你的 network.request() 调用的代码吗?

如果你正在下载一个 html 页面,你应该使用 network.download()。

于 2011-04-11T23:31:56.850 回答
0

我遇到了同样的问题,除了日语字符。尽管 Lua 不支持 UTF-8,但 Corona 的行为就像它一样。这意味着...如果您将 UTF-8 字符串传递给 display.newText(...),它应该可以正确显示。现在,如果你输出到控制台,它实际上会打印出字符串的原始字节。而且,如果您尝试打印字符串的长度,它实际上会打印出字节数。

因此,总而言之,Lua 将所有字符串视为一个字节数组。它对 UTF-8 一无所知。某些 Corona API 方法在传递 UTF-8 字符串时会正确显示字符串。

当我将 UTF-8 与纯 ASCII 字符混合时遇到了问题,我认为这让 Corona 感到困惑(我的意思是我将英文字符与日文字符混合在一起......不过仍然是 UTF-8)。我有一种预感,字符串中的每个字符必须具有相同的字节长度,以便 Corona 正确显示它。尝试一次打印一个字符,看看是否有帮助。如果您遇到麻烦,请随时在此处发表评论。我也想自己解决这个问题。

于 2011-04-15T17:02:09.790 回答