まず、以下のプログラムについて、
これをコマンドプロンプトで実行すると・・・
これは、エディタで文字コードUTF-8で書かれた文字列「こんにちは、世界(UTF-8)」が、コマンドプロンプトでShiftJISとして「縺薙s縺ォ縺。縺ッ縲∽ク也阜・・TF-8・・」と表示されています。
■chcpコマンド:表示する文字コードの変更
そこで、chcpコマンドでコマンドプロンプトのコードページをUTF-8にしました。chcp 65001選択可能なコードページは以下の通りです。
- 437 IBM437
- 932 shift_jis
- 1200 utf-16
- 20127 us-ascii
- 20932 EUC-JP
- 50220 iso-2022-jp
- 50222 iso-2022-jp
- 51932 euc-jp
- 65001 utf-8
コードページの変更で、解読できるようになりましたが、まだ2つ問題があります。
一つは1文字目が文字化けしていること。
もう一つは、1行の文が3行に渡って表示されていることです。
標準出力のストリームがflushされていないのか、不正な制御文字が認識されているのか、よくわからない現象が起きています。
■UTF-8の変換ライブラリ
いろいろ試したのですが、結局コマンドプロンプトをUTF-8表示にすることはあきらめて、UTF-8文字列を出力直前でShiftJISに機械変換することにしました。先人の知恵をお借りしました。(あるるんぶろぐ:UTF8からSJISに文字コード変換ライブラリを作りました)
charconvライブラリをソースフォルダに加え、print関数に追加しました。
charconvライブラリの依存しているcompiletimeライブラリをインストールします。
haxelib install compiletimeそして、compiletimeライブラリを-libオプションで指定してコンパイルしています。(上のコマンドラインの1行目)
やっと、正常に日本語をコンソールで利用できるようになりました。
あるるさん、ありがとうございました★
import sys.FileSystem; import sys.io.File; import charconv.UTF8ToSJIS; class Test { static function print(str:String) { Sys.println(charconv.UTF8ToSJIS.conv(str)); } static function main() { var str = ""; print("Hello, World."); print("こんにちは、世界(UTF-8)"); print("Bye!"); } }