From: "NARUSE, Yui" Date: 2008-01-19T13:40:55+09:00 Subject: [ruby-dev:33179] Re: Binary String 成瀬です。 Hiroshi Ichikawa wrote: > (a) メールやHTTPで受け取ったデータのcharsetパラメータに知らない名前が書いてあったとき(by 田中さん) > (b) Ruby 1.8 から Marshal 経由でやってきた String([ruby-dev:33164]) > は、「適切な encoding を指定することが困難」な例であり、これらをASCII-8BITとしてしまうと「8BIT な string > はバイナリデータとしてみなしてしまう」では問題がある例、だと思います。 > これについてはどのように考えているのでしょうか? Tcl/Tk の文脈では、ASCII-8BIT ならば変換しない、なので「問題がない」と思 います。 > 1. これらは例外的なケースなので、無視する。これらがバイナリデータと区 別できない(ゆえに例えばこれらのStringをTkに食わせると文字化ける)として も仕方がない。 どの道エンコーディングが分からないので文字化けは不可避です。文字化けして しまうのは仕方がありません。もし何らかの理由でエンコーディングがわかるの ならば、それを設定してください。 > 2. これらのケースについても何らかの方法でASCII-8BIT以外の適切な encodingが指定されるべき。 > > 個人的には、このようなケースで「エンコーディング不明な文字列」が生成さ れる可能性があり、そのような文字列とバイナリデータを区別したいケース(e.g. > Tk)がある以上、「エンコーディング不明」とバイナリデータには別々の encodingを割り当てるべきだと思います。 現在は「そのような文字列とバイナリデータを区別したいケース」は存在しない という前提に立っています。もしそのようなケースがあるのならば必要なので しょうが。 実際は、「そのような文字列」はエラー扱いにしてしまった方が妥当なことが多 いように思われるので、必要ないんじゃないかなぁと思っています。 > ただし、Tkがこのような「エンコーディング不明な文字列」を受け取ったとき は、locale_charmapとみなして変換するのではなく、エラーにすべきだと思いま す。上の(a)や(b)を勝手にlocale_charmapと仮定するのは危険です。エラーにす ると1.8との互換性の問題がおきますが、問題がおきるのは > ・スクリプトがマルチバイト文字列を含んでいるがmagic commentがなく-Kオ プションもつけていなかった場合。 > ・上記(a)や(b)のような文字列をlocale_charmapと仮定してうまくいっていた ケース。 > であり、これらは1.8でも「たまたま動いていた」に近いものなので、これら がエラーになってもしょうがないような気がします。 これは仰る通りだと思います。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA