Vista文字化けの原因追求
http://d.hatena.ne.jp/korakurider/20061201/p1 では、コードに対応するフォントがないためと仮説をたてていましたが、フォント以外の部分を調べてみます。
環境とコンバーター
m17nのフレームワークでは、言語環境クラスが外部とのやりとりに使用する適切なコンバーターを決定します。例えば日本語の場合 言語環境クラス(JapaneseEnvironment)の #clipboardInterpreterClassや#inputInterpreterClassなどです。この中を見ると、Win32環境の場合は 必ずシフトJISを経由するコンバーターを使っていることがわかります。
しかし、JIS X 0213:2004 にはシフトJISと対応しない文字が含まれており、シフトJIS経由コンバーターの選択は不適切です。
VMはどんなコードをイメージ側に渡しているか?
今回はクリップボードからデータを受け取る処理を調べます。(キー入力処理をデバッガで調べるのはとても大変なので。。。)
クリップボードからのデータの受け取り処理は、Clipboard>>clipboardText のあたりです。
- Clipboard>>primitiveClipboardText で、VM経由でクリップボードのデータを受け取る
- あらかじめ決定していたコンバーターを使い、#fromSystemClipboard: で変換する
さて、「倶」のもう一つの字をクリップボード経由でTextMorphに渡してみたところ、#primitiveClipboardText から返ってきたデータ自体が既に化けていました。VMは正しくデータを受け取れていません。