1

Luaでは、iPadコロナのプロジェクトで、network.requestを使ってUTF-8のサーバーテキストファイル(漢字を含む)をリクエストしているのですが、コンソールやアプリで表示すると結果が「ガベージ」と表示されます。たとえば、Google Chrome は、サーバーがこれを (PHP を使用して) 'Content-Type: text/plain; に送信するときに http ヘッダーを設定しているため、同じ UTF-8 ページを正常に表示します。charset=utf-8' (また、BOM もバイト オーダー マークもありません)。Lua で見られる「ガベージ」は、オプション メニューを使用して Chrome にページを ISO-8859-1 としてレンダリングするよう「強制」した場合と似ています。

誰にも助けや指針がありますか?他のすべてが失敗した場合、「ガベージ」文字列を Lua 内の UTF-8 オリジンに戻すにはどうすればよいですか?

助けてくれてありがとう!

4

3 に答える 3

5

Lua は UTF-8 について何も知りません。Lua 文字列は単なるバイト列です。コロナ自体が文字列を ISO8859-1 として解析しているようです。これの原因として最も可能性が高いのは、文字列の各バイトを Unicode コード ポイントとして扱うなど、非常に愚かで素朴なことを行っていることです。

残念ながら私はコロナを知らないので、特定の解決策を提供することはできませんが、エンコーディングを含む関数がどのようなものかを確認することをお勧めします --- 文字列をレンダリングする特定の関数があるかもしれませんたとえば、特定のエンコーディング。

于 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 については何も知りません。一部のコロナ API メソッドは、UTF-8 文字列を渡すと、文字列を正しく表示します。

UTF-8 とプレーンな ASCII 文字を混在させたときに問題が発生し、コロナを混乱させたと思われます (英語の文字と日本語の文字を混在させたということです... それでもすべて UTF-8 ですが)。コロナが正しく表示するには、文字列の各文字がバイト単位で同じ長さでなければならないという予感があります。一度に 1 文字ずつ印刷してみて、それが役立つかどうかを確認してください。問題が発生した場合は、お気軽にここにコメントを投稿してください。私もこの問題を自分で解決したいと思います。

于 2011-04-15T17:02:09.790 に答える