Forum: Ruby-dev [ruby-trunk - Bug #7954][Open] "あ".byteslice(0,2).valid encoding? should return false

Posted by Tietew (Toru Iwase) (Guest)
on 2013-02-25 10:07
(Received via mailing list)
Issue #7954 has been reported by Tietew (Toru Iwase).

----------------------------------------
Bug #7954: "あ".byteslice(0,2).valid_encoding? should return false
https://bugs.ruby-lang.org/issues/7954

Author: Tietew (Toru Iwase)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0
ruby -v: 2.0.0p0


=begin
valid encodingな文字列に対するString#bytesliceがinvalid 
encodingなバイト列を生成してもvalid_encoding?がtrueになります。
これはfalseになるべきだと思います。

なお、1.9.3も同じ挙動です。

 irb(main):001:0> RUBY_DESCRIPTION
 => "ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]"
 irb(main):002:0> "あ".encoding
 => #<Encoding:UTF-8>
 irb(main):003:0> "あ".valid_encoding?
 => true
 irb(main):004:0> "あ".byteslice(0,2)
 => "\xE3\x81"
 irb(main):005:0> "あ".byteslice(0,2).valid_encoding?
 => true
 irb(main):006:0> "\xE3\x81".encoding
 => #<Encoding:UTF-8>
 irb(main):007:0> "\xE3\x81".valid_encoding?
 => false

ちなみに、invalidな文字列を正しい位置でbytesliceすると正しくvalidと判定されます。

 irb(main):025:0> "あ\xE3".valid_encoding?
 => false
 irb(main):026:0> "あ\xE3".byteslice(0,3).valid_encoding?
 => true
=end
Posted by "duerst (Martin Dürst)" <duerst@it.aoyama.ac.jp> (Guest)
on 2013-02-25 10:48
(Received via mailing list)
Issue #7954 has been updated by duerst (Martin Dürst).


この場合の問題はそもぞも
> "あ".byteslice(0,2).encoding
=> #<Encoding:UTF-8>

にあるかと思います。byteslice の戻り値の encoding は BINARY にすべきだと思います。
----------------------------------------
Bug #7954: "あ".byteslice(0,2).valid_encoding? should return false
https://bugs.ruby-lang.org/issues/7954#change-36991

Author: Tietew (Toru Iwase)
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 2.0.0
ruby -v: 2.0.0p0


=begin
valid encodingな文字列に対するString#bytesliceがinvalid 
encodingなバイト列を生成してもvalid_encoding?がtrueになります。
これはfalseになるべきだと思います。

なお、1.9.3も同じ挙動です。

 irb(main):001:0> RUBY_DESCRIPTION
 => "ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]"
 irb(main):002:0> "あ".encoding
 => #<Encoding:UTF-8>
 irb(main):003:0> "あ".valid_encoding?
 => true
 irb(main):004:0> "あ".byteslice(0,2)
 => "\xE3\x81"
 irb(main):005:0> "あ".byteslice(0,2).valid_encoding?
 => true
 irb(main):006:0> "\xE3\x81".encoding
 => #<Encoding:UTF-8>
 irb(main):007:0> "\xE3\x81".valid_encoding?
 => false

ちなみに、invalidな文字列を正しい位置でbytesliceすると正しくvalidと判定されます。

 irb(main):025:0> "あ\xE3".valid_encoding?
 => false
 irb(main):026:0> "あ\xE3".byteslice(0,3).valid_encoding?
 => true
=end
Posted by naruse (Yui NARUSE) (Guest)
on 2013-02-25 11:10
(Received via mailing list)
Issue #7954 has been updated by naruse (Yui NARUSE).

Category set to M17N
Status changed from Open to Assigned
Assignee set to naruse (Yui NARUSE)

duerst (Martin Dürst) wrote:
> この場合の問題はそもぞも
> > "あ".byteslice(0,2).encoding
> => #<Encoding:UTF-8>
>
> にあるかと思います。byteslice の戻り値の encoding は BINARY にすべきだと思います。

BINARY で受け取りたいならば、"あ".b.slice(0,2) とすればいいのであって、別のメソッドである意味がありません。
----------------------------------------
Bug #7954: "あ".byteslice(0,2).valid_encoding? should return false
https://bugs.ruby-lang.org/issues/7954#change-36992

Author: Tietew (Toru Iwase)
Status: Assigned
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category: M17N
Target version: 2.0.0
ruby -v: 2.0.0p0


=begin
valid encodingな文字列に対するString#bytesliceがinvalid 
encodingなバイト列を生成してもvalid_encoding?がtrueになります。
これはfalseになるべきだと思います。

なお、1.9.3も同じ挙動です。

 irb(main):001:0> RUBY_DESCRIPTION
 => "ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux]"
 irb(main):002:0> "あ".encoding
 => #<Encoding:UTF-8>
 irb(main):003:0> "あ".valid_encoding?
 => true
 irb(main):004:0> "あ".byteslice(0,2)
 => "\xE3\x81"
 irb(main):005:0> "あ".byteslice(0,2).valid_encoding?
 => true
 irb(main):006:0> "\xE3\x81".encoding
 => #<Encoding:UTF-8>
 irb(main):007:0> "\xE3\x81".valid_encoding?
 => false

ちなみに、invalidな文字列を正しい位置でbytesliceすると正しくvalidと判定されます。

 irb(main):025:0> "あ\xE3".valid_encoding?
 => false
 irb(main):026:0> "あ\xE3".byteslice(0,3).valid_encoding?
 => true
=end
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.