あけましておめでとうございます
私はお正月は自宅に完全に引き籠ってMaven2のi18nの問題の調査に
明けくれていました。他にやらなきゃいけないことが沢山あるのに、、
手始めにMaven2でXMLのパースの処理を引き受けているMXParserという
クラスに文字エンコーディングの自動検出機能をつける、という作業に
チャレンジしてみました。
Maven2が抱えているi18nの問題の、多分68%くらいはこのMXParserが
xml宣言のencoding指定を見事に無視してくれるところが原因といって
良いでしょう。
まだテストが足りないですが、一応なんとなく動くようになったので、
こちらに置いておきます。興味があるという奇特な方、
もしおられましたらぜひ中身をチェックしてコメント下さい。
まだ外部から明示的にエンコーディング指定した時の動作とかがいまいちです。
実装にあたっては、xercesのソースコードを参考にしました。
EncodingMap.javaとかはまんまxercesのパクリです。
RewindableInputStream.javaというクラスもxercesのなかに似たようなのが
あるのですが、うまく再利用できなさそうだったので、思いきって書き直して
ます。xercesのソースコードを初めて真剣に読んでみてわかったことは、
「意外とソースが汚い」ということです。使われてないとみられる変数やら
メソッドが結構あって苦戦しました。
UCS-4とUCS-2はSunのJDKではサポートされていないっぽかったので、
UnsuppoeredEncodingExceptionを投げるようにしてしまっています。
xercesでもUCSReaderというクラスを独自に作ってなんとかしてます。
MXParserはもともとXML仕様完全準拠を狙ったものでは無いでしょうから、
そこまでは必要ないと判断しました。
手元の環境では、UTF-16 ビッグエンディアン Byte Order Markあり、
Shift_JIS, EUC-JP, UTF-8の4つのエンコーディングで、簡単なXMLが正常に
読みこまれることを確認しています。
ところで、MXParserの"MX"って何でしょうね?
私はお正月は自宅に完全に引き籠ってMaven2のi18nの問題の調査に
明けくれていました。他にやらなきゃいけないことが沢山あるのに、、
手始めにMaven2でXMLのパースの処理を引き受けているMXParserという
クラスに文字エンコーディングの自動検出機能をつける、という作業に
チャレンジしてみました。
Maven2が抱えているi18nの問題の、多分68%くらいはこのMXParserが
xml宣言のencoding指定を見事に無視してくれるところが原因といって
良いでしょう。
まだテストが足りないですが、一応なんとなく動くようになったので、
こちらに置いておきます。興味があるという奇特な方、
もしおられましたらぜひ中身をチェックしてコメント下さい。
まだ外部から明示的にエンコーディング指定した時の動作とかがいまいちです。
実装にあたっては、xercesのソースコードを参考にしました。
EncodingMap.javaとかはまんまxercesのパクリです。
RewindableInputStream.javaというクラスもxercesのなかに似たようなのが
あるのですが、うまく再利用できなさそうだったので、思いきって書き直して
ます。xercesのソースコードを初めて真剣に読んでみてわかったことは、
「意外とソースが汚い」ということです。使われてないとみられる変数やら
メソッドが結構あって苦戦しました。
UCS-4とUCS-2はSunのJDKではサポートされていないっぽかったので、
UnsuppoeredEncodingExceptionを投げるようにしてしまっています。
xercesでもUCSReaderというクラスを独自に作ってなんとかしてます。
MXParserはもともとXML仕様完全準拠を狙ったものでは無いでしょうから、
そこまでは必要ないと判断しました。
手元の環境では、UTF-16 ビッグエンディアン Byte Order Markあり、
Shift_JIS, EUC-JP, UTF-8の4つのエンコーディングで、簡単なXMLが正常に
読みこまれることを確認しています。
ところで、MXParserの"MX"って何でしょうね?