CP932変換表の問題が顕在化する例

| コメント(0) | トラックバック(0)

JIS X 0208のシフトJISとUnicodeとの変換の問題として、CP932 (Windows-31J)の問題はよく知られています。書籍『プログラマのための文字コード技術入門』にも記しました。Windowsに実装されているUnicodeへの変換表が、標準の定義とずれている問題です。

この問題は、使用頻度の高さから、波ダッシュ「〜」(1面1区33点、SJIS 8160)が化け る問題としてよく知られています。

しかし、波ダッシュ以外にも大きな影響を受けている文字(記号)があります。

双柱「‖」1面1区34点 (SJIS 8161)は、垂直線が2本並んだ格好をしている記号です。文字名はDOUBLE VERTICAL LINEといいます。Unicodeで対応する符号位置はU+2016です。この記号はCP932変換表の影響を受けています。CP932変換表では、U+2016でなく平行記号 (PARALLEL TO, U+2225, 「∥」) に変換してしまうのです。

平行記号というのは、義務教育の算数だか数学だかの時間に出てきたと思うのですが、2つの辺が平行であることを表す記号です。AB∥CD、のようなやつです。この記号は2本の斜線で表すか2本の垂直線で表すか、どちらの形もあるようです。斜線でなく垂直線で表すこともあることから、CP932変換表では双柱記号と混同されたようです。JIS X 0213では、既存の双柱とは別の学術記号 (数学記号) として平行記号が採用されました。1面2区52点です。

双柱という記号は、一種の区切り記号として使われます。例えば、私が見たあるウェブサイトではタイトルの中にこんな使われ方をしていました。

  春のわくわく宿泊プラン‖大崩れホテル

これは区切り記号としてごく妥当な使い方です。小学館の『句読点、記号・符号活用辞典。』にはこの記号の使用例として辞書の用例が載っています。

ところが、CP932変換表によってこの記号がUnicodeの平行記号に変換されてしまうと、二重の縦線でなく二重の斜線として表示されてしまうことがあります。これはフォントに依存します。

Windows XPまでの同梱フォントは平行記号の字形が縦線の形に作られていたので問題が顕在化しなかったのですが、Vistaに付属のフォントでは斜線の形になりました。これによって、それまでは双柱つまり二重の縦線に見えていたシフトJISの記号が、Vistaでは二重の斜線になってしまったのです。二重の斜線を区切り記号として使うことは一般的ではありませんから、見た目に困ったことになります。双柱を斜線にしてしまうのは明白におかしい。符号位置のセマンティクスを逸脱した形になってしまっており、文字化けといってよい現象です。

先のサイトを最近見てみたら、区切り符号として双柱でなく単なる縦線「|」を使うよう変更されていました。想像ですが、このホテルではPCを入れ替えてOSも新しくなったら区切り記号が予想外の形に文字化けしたので記号を変えたのかもしれません。

CP932変換表の弊害というのはこういうところにもあるわけです。

コード変換のときにこの問題を避けるには、iconvでCP932を指定しないことです。シフトJISからUTF-8に変換するのに、

  $ iconv -f CP932 -t UTF-8 hoge.txt

のようにしてしまうと、上記の双柱の文字化けの問題が発生します。この問題が発生しないようにするには、

  $ iconv -f SHIFT_JIS -t UTF-8 hoge.txt

のようにすればOKです。ただしこれだと、Windowsを使って生成したシフトJISの場合、機種依存文字の丸付き数字やローマ数字などに対応しません。そうした記号を救済したいなら、Shift_JIS-2004を使って以下のようにします。

  $ iconv -f SHIFT_JISX0213 -t UTF-8 hoge.txt

これで、双柱や波ダッシュがきちんと変換されるだけでなく、①②のような丸付き数字、ⅡやⅢのようなローマ数字、℡や㈱のような組み文字にも対応します。機種依存文字の漢字は文字化けしますが、丸付き数字に比べて頻度はずっと低いですし機種依存文字はそもそも文字化けするものなのであまり問題にならないでしょう。

トラックバック(0)

トラックバックURL: http://yanok.net/yanok/mt-tb.cgi/261

コメントする

最近のブログ記事

Jアラート訓練メールで文字化けとのニュース
一昨日のことですが、中国・四国地方から文…
任俠の第3水準漢字
ユーモラス、と言っていいのか分かりません…
ふるさと納税で奥尻島のワインを頂きました
奥尻島は北海道の南西の方に浮かぶ島です。…
電子マネーの優先順位を考える
このブログを電子マネーとクレジットカード…
電子マネーiDの隠れたお得
iDというのはSuicaやEdyのような…

広告