【问题标题】:UTF-8 incorrectly displayed in Lua/ CoronaUTF-8 在 Lua/Corona 中显示不正确
【发布时间】:2011-07-06 11:18:18
【问题描述】:

在 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 来源?

感谢您的帮助!

【问题讨论】:

    标签: unicode utf-8 lua coronasdk


    【解决方案1】:

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

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

    【讨论】:

    • 这看起来确实像 CoronaSDK 问题。 @Phillip:考虑使用#CoronaSDK 散列标签发送指向此问题的链接(请参阅问题文本下方的小“链接”链接)。打赌你会很快得到帮助。
    • 大卫,谢谢,你的解释很有意义。实际上,我在此期间将其发布到了 Corona 错误论坛。作为一个巨大的解决方法,我现在实际上是用拼音发送文本(应该是汉字),这是对中文更 ASCII 友好的转录! (总比看不懂的英文要好,但对中国读者来说一定很傻:))
    【解决方案2】:

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

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

    【讨论】:

    • 是的,我使用的是 network.request() 而不是 network.download()... 会试试后者,非常感谢!!
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2014-02-11
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多