現在、Unity3Dでストーリー性があるゲームを作成しており、イベント管理をするためにNLua(Luaのバージョンは5.2)を使っています。
ゲームは、日本語を含むパスに置かれる場合も考えられ、また、Luaファイルにも日本語を使いたいと考えています。
しかし、luaファイルのパスに日本語を含む、または、ファイル名に日本語を含むファイル(以下、日本語ファイル)を
DoFileメソッドで読み込むことができませんでした。
以下、windows7で日本語ファイルの読み込みを検証したコードです。
ちなみにLua本体であるlua52.dllは
https://github.com/NLua/NLua
からソースコードをダウンロードしてVisual Stadio 2015でコンパイルして作成したものを使いました。
E:\えええ.lua
Lua
1Debug.Log( "hello".."aaa")
E:\test.lua
このファイルのみShift-JISで書いてあります。
Lua
1print("えええ") 2print("えええ") 3assert(loadfile[[E:\えええ.lua]])()
C#
1using NLua; 2using NUnit.Framework; 3 4public class LuaJapaneseTest { 5 6 Lua lua; 7 8 [SetUp] 9 public void SetUp() { 10 lua = new Lua(); 11 lua.LoadCLRPackage(); 12 lua.DoString("import 'UnityEngine'"); 13 14 } 15 16 [Test] 17 public void えええを読み込めるか() { 18 string filename = @"E:\えええ.lua"; 19 lua.DoFile(filename); 20 } 21 22 [Test] 23 public void ShitJISでファイル名を指定して読み込めるか() { 24 string filename = @"E:\test.lua"; 25 lua.DoFile(filename); 26 } 27}
実行結果
えええを読み込めるか [0.001s]
NLua.Exceptions.LuaScriptException : cannot open E:\えええ.lua: No such file or directory
at NLua.Lua.ThrowExceptionFromError (Int32 oldTop) [0x0003a] in G:\program\Assets\NLua\Lua.cs:365
at NLua.Lua.DoFile (System.String fileName) [0x00068] in G:\program\Assets\NLua\Lua.cs:530
at LuaJapaneseTest.えええを読み込めるか () [0x00006] in G:\program\Assets\Script\Editor\LuaScripts\LuaJapaneseTest.cs:19
となり、Shift-JISでファイル名を指定した場合のみ読み込みに成功します。
Ubuntu14.02 64bitで実行したときは、日本語ファイルを読み込むことが出来、
Windows7 64bitでは読み込むことが出来ませんでした。
以上のことから日本語ファイルを読み込めない原因は、Windowsのファイル名はShift-JISで、DoFileの引数で渡される文字列の文字コードが、C言語で書かれたLua本体で正しく認識されないことではないかと考えました。
そこで、
- C#側で文字コードをShift-JISに変換して渡す
- Lua側で受け取った文字列をShift-JISに変換する
- C言語で受け取った文字列をShift-JISに変換する
という3つの方法が考えられます。
質問したい点は
- そもそも、Windowsで日本語ファイルが読み込めないのはファイル名はShift-JISで、DoFileの引数で渡される文字列の文字コードが、C言語で書かれたLua本体で正しく認識されないからなのか
- もし、そうなら、C#もしくはLua、C言語で文字コードを変換する(できればLuaかC#で)にはどうすればいいでしょうか。
です。
長文になってしまいましたが、回答よろしくお願いします。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。