From: "NARUSE, Yui" Date: 2008-08-01T23:51:40+09:00 Subject: [ruby-dev:35721] Re: Windows-31J <-> UTF-8 roundtrip 成瀬です。 Tanaka Akira wrote: > 以下のように Windows-31J と UTF-8 が roundtrip するかどうか > を調べると、しない文字がいくつかありますが、そういうものでし > たっけ? > > % ./ruby -ve ' > hi_bytes = (0x81..0x9f).to_a + (0xe0..0xfc).to_a > lo_bytes = (0x40..0x7e).to_a + (0x80..0xfc).to_a > hi_bytes.each {|hi| > lo_bytes.each {|lo| > w = [hi,lo].pack("CC").force_encoding("Windows-31J") > begin > u = w.encode("UTF-8") > rescue RuntimeError > next > end > w2 = u.encode("Windows-31J") > printf("%s %X %s\n", w.unpack("H*")[0], u.unpack("U")[0], w2.unpack("H*")[0]) if w != w2 > } > }' > ruby 1.9.0 (2008-08-01 revision 18310) [i686-linux] > 81be 222A 879c > 81bf 2229 879b > 81da 2220 8797 > 81db 22A5 8796 > 81df 2261 8791 > 81e0 2252 8790 > 81e3 221A 8795 > 81e6 2235 879a > 81e7 222B 8792 Windows-31J と Unicode の間で往復互換性のない文字が存在すること自体は、 そういうものなのですが、少なすぎる上に違いますね。 こんな感じになるはずです。 http://support.microsoft.com/default.aspx?scid=kb;ja;JP170559 -- NARUSE, Yui