試したみたことを報告させていただきます
※プロパティシートを読み込み、コマンドライン等の設定は既存のプロパティシートに追加しています
コード:
printf("ohayou\n");
printf( "おはよう\n");
printf(u8"おはよう\n");
①コマンドラインに/source-charset:utf-8を設定、ファイルの保存形式はShift-JIS
結果:u8おはようの文字列定数は表示される
②コマンドラインに/source-charset:utf-8を設定、ファイルの保存形式はUTF-8(シグネチャなし)
結果:u8おはようの文字列定数は文字化け
ここから、UTF-8で保存したLuaファイルを読み込み
print('日本語ファイルだよ')
VSのローカルWindowsデバッガーでデバッグ
③コマンドラインに/source-charset:utf-8を設定、ファイルの保存形式はUTF-8(シグネチャなし)
結果:Luaファイルから読み込んだ文字列は「蝠・刀縺ッ薬草縺繧」で文字化け
u8おはようの文字列定数は文字化け
④コマンドラインに/execution-charset:utf-8を設定、ファイルの保存形式UTF-8(シグネチャなし)
結果:構文エラーなどのエラーが発生してコンパイル失敗
⑤コマンドラインに/utf-8を設定、ファイルの保存形式UTF-8(シグネチャなし)
結果:ASCIIと同じ割当て以外は文字化けでohayouだけの表示
最後に、Releaseでビルドしたもの(Lua.exe)について
コマンドプロンプトを開きchcp 65001(UTF-8表示設定)と入力、ディレクトリ移動でLua.exe起動
⑥コマンドラインに/source-charset:utf-8を設定、ファイルの保存形式はUTF-8(シグネチャなし)
結果:おはようは文字化け、他は正しく表示される
⑦コマンドラインに/utf-8を設定、ファイルの保存形式はUTF-8(シグネチャなし)
結果:全部正しく表示される
という具合になりました。
VSから起動しても文字化けに対処できる方法を教えていただきありがとうございます!
自分でも⑦の結果からコンソール表示を常にUTF-8にする方法を探して試したのが以下のサイトに載っていたことです
(参考:
https://thinkridge.com/modules/xpwiki/? ... 8%E7%A4%BA)
stl.natvisのアクセス許可を得て
VS2013も書かれている通りにやってみましたがダメでした…
・/source-charset:utf-8は「プログラムのソーステキストを、コンパイル前のプリプロセスフェーズへの入力として使用される内部表現として解釈するために使用されるエンコーディングです」とあるので、VSでコードを書いてるときはUTF-16ということでいいのでしょうか?
(参考:
https://docs.microsoft.com/ja-jp/cpp/bu ... ew=vs-2019)
・実行ファイルの文字コードを指定する/execution-charset:utf-8だとエラーになるのはどうしてなのでしょうか?
エラーを見るにコード変換で他の文字に扱われているらしく「;」や「)」がない、リテラルサフィックスが無効等が出てます。
VSでUTF-16やShift-JISで記述していようがファイル保存で指定したエンコード形式、実行ファイルなどでは内部でエンコードするがそれに失敗しているということでしょうか?
プリプロセスの話など、未だに中でどのようなことが行われているのか完全に把握できておりません。
よろしくお願いします。