困った時の自分用メモ

読んだ本を考察してメモったり、自分でいじった物の感想をメモったりする場。週1更新を目指します。

Luaの話~LuaからUnity側へ、全角文字列を送る方法~

Lua側で設定をして、その設定をそのままUnity側に送るという事を想定している。

例えば、キャラクターの説明文などをLuaスクリプト上に記載しておき、それをUnity側に送ってTextに貼りつければそのまま表示される、といった具合だ。

 

で、そういえば全角文字列の表示検証した事なかったなと思い、試しに送ってみたら、見事に表示されない。

 

IntPtr res_s = NativeMethods.lua_tolstring(luastate, i, out res);
string resString = Marshal.PtrToStringAnsi(res_s);

 

このresStringが空になったのだ。

luastateを見る限り、文字列として認識している何かが格納されている、というところまでは判明したのだが、そもそもresの中身が0なので、LuaDLL側での処理で、送っているバイト文字が何か形式違反していて認識されていないのだろうと仮定し、それじゃあLuaスクリプト側の文字コードとかその辺が原因だろうという事で、色々試してみた。

 

sjis ⇒ 空文字

unicode ⇒ エラー(attempt to call a string value)

UTF-8 ⇒ 空文字

unicode(BOM有) ⇒ 成功

UTF-8(BOM有) ⇒ 成功

 

というわけで、対症療法だけやるなら、Luaスクリプト文字コードUTF-8のBOM有にしておけばいいっぽい。

 

ただ、なんでそうなっているのかは、LuaDLLのプログラムまで見にいく元気がないので、今回は置いておくことにする…。