From: "NARUSE, Yui" Date: 2008-08-02T23:46:58+09:00 Subject: [ruby-dev:35738] Re: Windows-31J <-> UTF-8 roundtrip 成瀬です。 Tanaka Akira wrote: > In article <48935EBD.3010603@airemix.jp>, > "NARUSE, Yui" writes: > >> するつもりなんですが、テーブル生成スクリプトの公開を待って早9ヶ月。 >> 少なくとも 1.9.5 以前には ICU の ucm ファイルからテーブル生成するスクリプトが、 >> ruby 1.9 のリポジトリ内に現れるようにするつもりではあります。 > > 昨日、テーブル生成スクリプトを作ってみたんですが、どうですかね。 あぁ、なるほど、それで roundtrip の話なのですね。 > http://www.a-k-r.org/tmp/transcode-table-gen.patch > > test_transcode.rb くらいは動きます。 テーブル生成という観点からですと、大部分は roundtrip なので、 基本的に roundtrip のテーブルを作って、1方向は別に管理するのがよいと思います。 ucm 形式は対応のレコードごとにフラグを付けて、1方向変換をしていますね。 さておき、骨子としてはよいかと思います。 つっこむとしたら、 + transcode_compile "from_SHIFT_JIS", "Shift_JIS", は "Shift_JIS", "UTF-8" にするとか、 + [ + ["{00-7f}", :nomap], + ["A1", "EFBDA1"], ["A2", "EFBDA2"], ["A3", "EFBDA3"], + ... は + [ + ["{00-7f}", :nomap], + ["JIS X 0208%UTF-8.txt"], なり、 もっと別に US-ASCII%UTF-8.tbl JIS_X_0208%UTF8.tblなりのファイルを作って、 transcode_define "Shift_JIS", "UTF-8" [ US-ASCII, JIS_X_0208 ] なりで定義するとか。 +static const rb_transcoder +rb_to_SHIFT_JIS = { + "UTF-8", "SHIFT_JIS", &to_SHIFT_JIS, 2, 1, + NULL, NULL, +}; は .erb に書かず自動生成にするとか、 その辺かなぁと。 -- NARUSE, Yui