Bug #832
closedEncoding in which Array#pack returns when a string-related format and a byte seq format are mixed
Description
=begin
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する
=end
Updated by matz (Yukihiro Matsumoto) about 16 years ago
=begin
まつもと ゆきひろです
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に傾けるかは、やや難しい判断ではないかと思います。
まつもと ゆきひろ /:|)
=end
Updated by yugui (Yuki Sonoda) about 16 years ago
- Assignee set to matz (Yukihiro Matsumoto)
- Priority changed from 3 to 5
- Target version set to 1.9.1 Release Candidate
=begin
=end
Updated by yugui (Yuki Sonoda) almost 16 years ago
=begin
applied in r21074
=end