とりあえずレガシーエンコーディングプロジェクトの成果待ち
とりあえずレガシーエンコーディングプロジェクトの成果待ち
もうちょっとお気楽に対応できるかと思っていたんだけど、やっぱり大変そう。
(だからこそレガシーエンコーディング対策プロジェクトを立ち上げているのだと思いますけれど)
# 森山 将之 『eucJP-ms の ucm ファイルは、最初、成瀬さんが作っていたのですが、変換がうまくいっていない所があったので、私が作ったものになっていると思います。
Unicode から eucJP-ms への変換でJIS規格準拠のマッピングで変換されたものも受け付けるように多対1 の変換を行っています。
TOG/JVC のマッピングテーブルが元になっていますが、eucJP-0212M.txt はファイルが途中で途切れていて、そのままでは使えません。eucJP-0212M.txt.970820 (旧バージョン?)というのがあるのですが、eucJP-0212M.txt では 0x8FA2B7 は U+FF5E となっているのが、eucJP-0212M.txt.970820 では、0x8FA2B7 は U+007E になっているなどの違いがあり注意が必要です。
http://www.opengroup.or.jp/jvc/cde/appendix.html
→ 1. Microsoft Windows 3.51 式の変換
Legacy Encoding Project では、その多対1 変換を取り除いた ucm ファイルおよび、ucm ファイルを生成するためのスクリプトを公開予定です。
JIS X 0208 の WAVE DASH と JIS X 0212 の TILDE の問題があるので、JIS系とCP932系の相互変換は出来ないと考えておいた方が無難でしょう。
eucJP-ms は、そこのところは割り切って JIS X 0208 の WAVE DASH と JIS X 0212 の TILDE は区別できないものとして扱ってます。(どちらも U+FF5E にマッピングされ、eucJP-ms への変換では、JIS X 0212 TILDE は使用されません)』
# 森山 将之 『Encodeモジュール用の cp51932、cp5022[01] (ユーザー定義文字なし) の超手抜き実装の例。(以前、試しに作ったものです)
http://www2d.biglobe.ne.jp/~msyk/software/perl5/CP932Family.pm
Unicode との変換は、cp932 を使用し、jcode.pl で euc や jis との変換を行う。
jcode.pl を使っているので、ユーザー定義文字は〓に置換されます。』*
森山さんは「JIS系とCP932系の相互変換は出来ないと考えておいた方が無難」と書かれていますが、問題が生じる可能性があることを認識のうえで――例えば「相互変換」ではなくどちらかに寄せる対応になると認識したうえで正規化する変換はあったほうが良いと思うのです。
なぜならUTF-8(Unicode)で流通しているテキストをレガシーエンコーディングに変換する必要がまだあって、そのUnicodeなテキストがCP932系なのかJIS系なのかは判別することができないからです。そういう時はなんらかのポリシー(CP932系にするかJIS系にするか)で正規化するようにしないと困ったことになるような気がします。
確かAmazonのデータはCP932系らしく「~」はU+FF5Eで送られてきたと思うのですが*1、本当にCP932系なのであればそれをJIS系のエンコードに変換すると問題が生じたりするはずですし。そういう時に変換できないと困るんじゃないかと思うのです。
*1:逆でしたっけ?