永井@知能.九工大です.

From: Yukihiro Matsumoto <matz / ruby-lang.org>
Subject: [ruby-dev:32553] Re: Binary String
Date: Wed, 12 Dec 2007 16:07:57 +0900
Message-ID: <E1J2LhM-0004jh-7x / localhost>
> |irb で実行したためなのかもしれませんが,
> |Encoding.default_external が EUC-JP の状態で,
> |'漢字'.encoding とすると ASCII-8BIT が返ってきます.
> |これを無変換で Tk に送り込むと当然文字化けすることになります.
> 
> あー、すいません。そこはまだ実装されていないのです。ので、現
> 在の実装をもとに判断すると間違うことになります。

あ,そういうことですか.
時期が時期ですし,この辺りは実装済だろうと勝手に思ってました.

では,encoding 指定がない,あるいは不明な場合は,
必ず default_external になると考えていいのでしょうか?
で,default_external が ASCII-8BIT に設定されることはないと.

それが保証されるのであれば問題はなさそうです.
保証されないのであれば,ASCII-8BIT となるのはどういうケースかを
教えていただきたいと思ってます.
その結果次第で,要望が変るかもしれません.

# Martin さんのメール [ruby-dev:32554] の通りだとすると,
# 嬉しくない形で ASCII-8BIT になってしまうケースがあるように見えます.
# そうであるなら,やはり安全確実な binary data のための encoding が
# 欲しいと感じます.

議論を追いきれていないので,
頓珍漢なことを言っていたらごめんなさい.

それはそれとして...
Ruby での encoding 名と Tk での encoding 名とで
対応表を用意しておく必要があるかもと思っています.
Tcl/Tk の lsort [encoding names] の結果は
----------------------------------------------------------------------
ascii big5 cp1250 cp1251 cp1252 cp1253 cp1254 cp1255 cp1256 cp1257
cp1258 cp437 cp737 cp775 cp850 cp852 cp855 cp857 cp860 cp861 cp862
cp863 cp864 cp865 cp866 cp869 cp874 cp932 cp936 cp949 cp950 dingbats
ebcdic euc-cn euc-jp euc-kr gb12345 gb1988 gb2312 gb2312-raw identity
iso2022 iso2022-jp iso2022-kr iso8859-1 iso8859-10 iso8859-13
iso8859-14 iso8859-15 iso8859-16 iso8859-2 iso8859-3 iso8859-4
iso8859-5 iso8859-6 iso8859-7 iso8859-8 iso8859-9 jis0201 jis0208
jis0212 koi8-r koi8-u ksc5601 macCentEuro macCroatian macCyrillic
macDingbats macGreek macIceland macJapan macRoman macRomania macThai
macTurkish macUkraine shiftjis symbol tis-620 unicode utf-8
----------------------------------------------------------------------
という感じなのですが,Ruby の m17n ではどうなりそうでしょうか?
-- 
                                       永井 秀利 (九工大 知能情報)
                                           nagai / ai.kyutech.ac.jp