作者: Koichi Yamamoto
日時: 2004/2/18(02:20)
山本です。

"HFC01730@... (水羽信男)"さんは書きました:
> 風邪の予後はいかがですか。この時期、インフルエンザが猛
> 威をふるっているようですので、十分にお気をつけください。

お気遣いありがとうございます。
ようやく喉の調子も元に戻ってきました。

> なお、質問というわけではなく、コンソールがらみで、その
> 後、気のついたことです。

> なおコマンドラインでの日本語入力では、tclsh84でも、tkcon
> でも、「王贛愚」はまともに出力されますが、
> invalid command name "王贛愚"
> の結果が、tkconは正しく出力されるのに対して、tclsh84では
> ?となります。

今回のことで、Windows2000/XPのコマンドプロンプト(コンソール)で
Unicodeを表示するということをこれまで考えたことが無かったことに
気づきました。typeコマンドがUnicodeテキストを正常に表示できるのも
今回の件で初めて知りました。

で、気になったので色々試してみました。以下はWindows APIの話になる
ので、詳細は無視して、結局tclsh84はUnicode文字を表示できないと
いうことだけ理解してください。
# まあ↓は自分に向けたメモ書きということで(^^;


Windows2000ではWriteConsoleWというWindows APIを使うことで
Unicode文字をコマンドプロンプトに表示することができました。
Microsoft Platform SDKによれば、WriteFile APIでUnicode文字を
コンソールに出力できないみたいですね。VC++のライブラリ関数
wprintfを使っても出力できませんでした。コマンドプロンプトの
プロパティにコードページの設定があるので、これに準じて文字を
表示しているようです。

Tclコアのソースを読むと、WriteConsoleWは使われていませんでした
(ANSI版のWriteConsoleAは使われているが)ので、tclsh84の上で
贛という文字を表示することはできないと判断できます。

と、いうことは、WriteConsoleWを使うようにtclのソース
(win/tclWinConsole.c)を修正して、さらにstdoutのencodingを
unicodeにすれば、コマンドプロンプトでもUnicodeを表示できるように
なるはず...... ReadConsoleAとstdinも直さないとダメか.......

--
Koichi Yamamoto, 
http://homepage3.nifty.com/yamakox/