Windows の Gauche(と Ypsilon)のコンソールで UTF-8 対応 #4

Windows コンソールで多言語対応ができるようになりました(Ypsilon ですが)。

前回と同じ以下を実行したものです。

(integer->char 955)
(integer->char #x3042)
'こんにちは
'你好
'안녕하세요

上図は対応前のものです。


Ypsilon はコンソールから読み込むのに ReadFile を、コンソールへ書き込むのに WriteFile を使用しているんですが、ReadFile も WriteFile も、いわゆる ANSI コードページで読み書きするので、日本語と中国語を同時に扱うことができません。

これを ReadConsoleW と WriteConsoleW に置き換えて、コンソールへの読み書きを UCS2 で行い、Ypsilon の VM へは UTF-8 で受け渡しするようにすれば、あらゆる Windows 環境(Windows 95 系除く)で多言語環境が実現できます。

ただし、Windows はコンソールのフォントを自由に変更できないので、表示できない文字(今回の場合ハングル)は表示できませんが、VM には正しい文字コードが渡されています。


パッチは以下に用意しました。r503(バージョン 0.9.6 相当)のソースコードに対するものです。

修正箇所は、コンソールの読み書きの部分を修正し、CP932 のための処理はばっさりすべて削除し、どのコードページでも共通処理になっています。

テストもすべて通っています(といっても、REPL なのでテスト評価対象ではないような気もしますが)。