Bug #832
Encoding in which Array#pack returns when a string-related format and a byte seq format are mixed
| Status: | Closed | Start date: | ||
|---|---|---|---|---|
| Priority: | High | Due date: | 12/24/2008 | |
| Assignee: | % Done: | 0% |
||
| Category: | core | |||
| Target version: | 1.9.1 Release Candidate | |||
| ruby -v: |
Description
Yuguiです。
現在、次のようになります。
["\u3042", 1].pack("A*s!").encoding #=> #<Encoding:UTF-8>
しかしながら、s!が生成するのは本質的にバイナリであって、この場合
rb_enc_compatible(UTF-8, ASCII-8BIT) で全体はASCII-8BITになるべきではな
いでしょうか。
今のところは
* s!が生成するのはエンコーディングを持たない
=> 結合相手がいればそれに従う
=> いなければASCII-8BIT
という判断のように見えます。
しかしながら、AaMmUuxなどを除けばpackが生成するのは文字列というよりはバ
イト列です。特にプラットフォーム依存なpack formatについてはその色彩が濃
厚です。これらは積極的にASCII-8BITに傾けるべきではないでしょうか。
--
Yugui <yugui@yugui.jp>
http://yugui.jp
私は私をDumpする
History
Updated by matz (Yukihiro Matsumoto) over 3 years ago
まつもと ゆきひろです In message "Re: [ruby-dev:37294] [BUG:trunk] Encoding in which Array#pack returns when a string-related format and a byte seq format are mixed" on Sun, 7 Dec 2008 11:54:23 +0900, "Yugui (Yuki Sonoda)" <yugui@yugui.jp> writes: |今のところは |* s!が生成するのはエンコーディングを持たない | => 結合相手がいればそれに従う | => いなければASCII-8BIT |という判断のように見えます。 | |しかしながら、AaMmUuxなどを除けばpackが生成するのは文字列というよりはバ |イト列です。特にプラットフォーム依存なpack formatについてはその色彩が濃 |厚です。これらは積極的にASCII-8BITに傾けるべきではないでしょうか。 一理あります。 ただ、「エンコーディング的に壊れた」文字列を許容するRubyとし ては、エンコーディング情報を保存したいという気持ちもあって上 記のようになっています。 以下はとりとめのない考え。 文字列 + バイナリ + 文字列 という関係があった時、 * 全体をASCII-8BITにしてしまうとエンコーディング文字列の情 報は失われる * エンコーディングを保存すると、結果がエンコーディング的に 壊れた文字列になる * 保存する場合、複数文字列のエンコーディングが矛盾していた 場合、エラーにはできないので、ASCII-8BITにするしかなく結 局情報が失われることは避けられない ということになるので、ここでできるだけ保存するかできるだけ ASCII-8BITに傾けるかは、やや難しい判断ではないかと思います。 まつもと ゆきひろ /:|)
Updated by yugui (Yuki Sonoda) over 3 years ago
- Assignee set to matz (Yukihiro Matsumoto)
- Priority changed from Low to High
- Target version set to 1.9.1 Release Candidate
Updated by yugui (Yuki Sonoda) over 3 years ago
- Due date set to 12/24/2008
Updated by yugui (Yuki Sonoda) over 3 years ago
- Category set to core
Updated by yugui (Yuki Sonoda) over 3 years ago
applied in r21074
Updated by yugui (Yuki Sonoda) over 3 years ago
- Status changed from Open to Closed