From: Hiroshi Ichikawa Date: 2008-01-19T13:10:59+09:00 Subject: [ruby-dev:33178] Re: Binary String Gimiteといいます。 横からすいません。 田中さんは > そして、適切な encoding を指定することが困難であるなら、その > 困難さを除去する支援を行うことをまず第一に考えるべきです。そ > れを充分に考えた結果、それが無理であると確信が持てた時に、は > じめて違う形の支援 (例えばBINARY の導入とか)を考えるべきでしょ > う。 成瀬さんは > で、実際のところ、テキストデータに encoding をきちんと設定すれば、ASCII- > 8BIT な string はバイナリデータとしてみなしてしまうので問題ないのではな > いか。何かダメな例ある?というのがこれからの話でしょうか。 と言っていましたが、 (a) メールやHTTPで受け取ったデータのcharsetパラメータに知らない名前が書いてあったとき(by 田中さん) (b) Ruby 1.8 から Marshal 経由でやってきた String([ruby-dev:33164]) は、「適切な encoding を指定することが困難」な例であり、これらをASCII-8BITとしてしまうと「8BIT な string はバイナリデータとしてみなしてしまう」では問題がある例、だと思います。これについてはどのように考えているのでしょうか?例えば、 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でも「たまたま動いていた」に近いものなので、これらがエラーになってもしょうがないような気がします。