2012年03月04日

WSH(VBScript) で Unicode 固有文字を表示/リダイレクトするには

コマンド・プロンプトで動く WSH (cscript) から Unicode 固有文字(日本語版 Windows なら中国語や韓国語も含む)を表示するには、設定が必要です。

まず、コマンド・プロンプトが表示するときに使っているフォントを TrueType フォントにします。

[ スタート > すべてのプログラム > アクセサリ > コマンド プロンプト ] コマンド・プロンプトのタイトルバーを右クリック [ 規定値 ]、[ オプション > 規定のコードページ > 932 (Shift-JIS) ]、[ フォント > フォント > (TrueType フォントのマークが付いたフォント)]、と設定します。 中国語の Windows では、規定のコードページを 950 (Big5) にします。 すると、次から開くコマンド・プロンプトは、Unicode 固有文字を表示することができるようになります。

英語版 Windows なら、次のような設定が必要です。

Windows7 for English. This setting keeps English on Windows.

Start [ Control Panel > Clock, Language, and Region > Regional and Language > Administrative > Change system locale > Japanese ], OK, Restart Windows, Start [ All Programs > Accessories > Command Prompt ], Right click on title bar [ Defaults ], [ Font > Font > (TrueType) MS gothic ].

WindowsXP for English. This setting keeps English on Windows. It is nessesary to use Windows CD-ROM.

Start [ Control Panel > Date, Time, Language, and Reional Options > Regional and Language Options > Languages > Install files for East Asian languages ], set CD-ROM, Restart Windows, [ ... > Regional and Language Options > Advanced > Japanese ], Restart, Start [ All Programs > Accessories > Command Prompt ], Right click on title bar [ Defaults ], [ Font > Font > (TrueType) MS gothic ].


たとえば、日本語の「あワ」、「兵」の最後の点がない中国語の漢字(下記の△)、ハングル文字の「ハン」の文字(下記の□)を表示する VBScript(下記)を、メモ帳で記述して Unicode 形式で保存して実行すると、そのまま表示できます。 メモ帳で日本語以外を入力するときは、下記のホームページなどからコピーするとよいでしょう。 なお、一部のテキスト・エディターでは、Unicode に対応していても、Unicode 固有文字の表示や保存ができないので注意してください。

WScript.Echo "あワ△□" '// U+3042(JP), U+30EF(JP), U+4E52(CN), U+D55C(KR)

→《Unicode-CJK統合漢字》漢字検索
  http://rtk.web.infoseek.co.jp/cjk/

→ 特殊文字一覧(1)unicode系
  http://www.ffortune.net/comp/net/ref/special.htm

→ Unicode の一覧 - BIGLOBE百科事典
  http://jiten.biglobe.ne.jp/j/7f/6c/02/9dfa04f1960b154c145dee02247dd10d.htm#.E4.B8.80.E8.A6.A7

→ Code Charts (公式サイト。ただしPDFは文字ではなく画像です)
  http://www.unicode.org/charts/

ただし、WSH から WSH(の子プロセス)を起動したときは、あるトリックを入れなければ、子プロセスの出力を正しく表示できません。

Shell::Exec の返り値である WshScriptExec は、システム・ロケールのマルチバイト文字しかサポートしていない(Windows7 でも、Unicode をサポートしていない)ようで、それが原因で子プロセスが出力する Unicode の文字コードを勝手に変更してしまうため、正しく表示できないのです。

ということは、ロケールによって変わらない Ascii の文字にエンコードするプログラムを介して、子プロセスを実行して、親プロセスの WSH が Unicode にデコードすれば、正しく表示できるというわけです。 ただし、Windows XP の VBScript の ChrW にバグがあって、U+8000 以上の文字コードを文字に変換できません。Windows 7 なら大丈夫です。 U+10000 以上の文字(サロゲート・ペア)は、コマンド・プロンプト、Power Shell とも Windows 7 でもサポートしていません。 ちなみにメモ帳はサポートしています。

なお、子プロセスの出力をエンコードするプログラムは、vbslib4 に付属する予定です。

sage_p at 22:43│Comments(0)TrackBack(0) プログラミング 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔