shift_jisとMS932(再々)

.NETにおいて、"shift_jis" = "MS932"(CP932)という等号は成り立つがJavaでは成り立たない。
日記で何度も採り上げているので、いい加減混乱しないだろうと思ったのだが、.NET<->Javaのデータ交換でまた嵌った。

Shift_JISのエイリアスの変更について

ならばIANAに登録されている"Windows-31J"を互いに使えば良いのだろうが、そうは問屋が卸さない。
.NET Frameworkでは文字セットに適合した変換を行うには、Encodingオブジェクトを作成するのだが、"Windows-31J"という名前をエンコーディング名に使えないのだ。"MS932"でも駄目だ。使えるのは誤解を招く"shift_jis"か、コードページ自体を示す"932"だけだ。XML宣言で表すとこうなる。

<?xml version="1.0" encoding="MS932"?>        ×
<?xml version="1.0" encoding="Windows-31J"?>  ×
<?xml version="1.0" encoding="shift_jis"?>    ○

特に困るのはXMLを使う時だ。.NETの世界では上のように"shift_jis"にしておけばまず困ることは無いが、このXMLをそのままJava側に持っていくと、XML宣言で書かれたエンコーディング名を頼りに処理を行うアプリケーションは"shift_jis"と"Windows-31J"の違いで影響が出る。

前にも書いたが、いい加減IANAに準拠して欲しいものだ。