日本語エンコーディング
ええと、monoのサポートは非常にヨワヨワです。日本語エンコーディングまわりがイケてないことに気づいたのは1.0リリース直前で手の出しようが無く、そして最近まで忘れてました(ばく 僕は全然使わないので…。日本語処理まわりが弱いよー、という話は、僕ができる範囲では声を大にしてw説明してきたつもりですが…
で、以下サマリーですが
- shift_jis : 一部の変換が非互換
- euc-jp : 3バイト文字の扱いに難あり。でさらに問題があるみたい
- iso-2022-jp : 未実装
という状態です。誰かやってくれないかなぁ…
ちなみにUnicode (utf-8/utf-16)は、System.Text.Encodingとしては問題なく使えるはずです。
で、各論。(1)shift_jisサポートがダメダメなのは、ひとつにはこれらがPortable.NETのコードをベースにしていて、けっこうやっつけな部分があるということ。PNETは日本人参加者がゼロで、日本語エンコーディングにはunicodeコンソーシアムが提供している変換マッピングでは使い物にならないとか、その辺のことをあまり知らずに*1使っていたりするので、shift_jisの互換性はあまりよくありません。僕が1.0リリース直前に気づいて直した部分がちょっとはありますが、焼け石に水です。それと(2)非Windows環境におけるshift_jisの扱いってかなり微妙ですというか分かりません。たとえばUnix環境上で動作しているMySQLやPostgreSQLと接続するときに、MS932でもいいものなんでしょうか。SJISを使う.NETアプリケーションをそのままLinuxに持って行って、何の問題もなく動くことが期待できるとは、ちょっと思えません。
euc-jpは、monoに存在していないことに気づいたときに、僕が何日かで形だけやっつけたものなので、品質はきわめて悪いです。
ていうか昔書いてました…
実際この辺も直したいとは思っていて、Miguelに「collationもそうだけど、エンコーディングまわりも改善の余地があるよね」と話してたりしたんですが。I18Nのフレームワーク部分以外では99.9*%日本人にしか利益が無い部分ですし…
*1:まあ僕も調べるまでは知らなかったわけですが