From: "phasis68 (Heesob Park)" Date: 2013-07-18T17:51:20+09:00 Subject: [ruby-core:56071] [ruby-trunk - Bug #8653][Open] Unexpected result of String#succ with utf-16 and utf-32 string. Issue #8653 has been reported by phasis68 (Heesob Park). ---------------------------------------- Bug #8653: Unexpected result of String#succ with utf-16 and utf-32 string. https://bugs.ruby-lang.org/issues/8653 Author: phasis68 (Heesob Park) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.1.0dev (2013-07-17 trunk 42011) [i386-mingw32] Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN I found the result of String#succ of UTF-16LE encoded string is incorrect. As a result, Range of UTF-16LE encoded string show some unexpected behavior. C:\work>irb irb(main):001:0> a = 'A'.encode('UTF-16LE') => "A" irb(main):002:0> b = 'B'.encode('UTF-16LE') => "B" irb(main):003:0> a.succ => "\u0141" irb(main):004:0> r = a..b => "A".."B" irb(main):005:0> r.to_s => "A\u2E2EB" irb(main):006:0> r.count => 3 irb(main):007:0> r.to_a => ["A", "\u0141", "\u0241"] irb(main):008:0> r.include?(b) => false irb(main):009:0> a = 'A'.encode('UTF-32LE') => "A" irb(main):010:0> b = 'B'.encode('UTF-32LE') => "B" irb(main):011:0> a.succ => "\u{1000041}" irb(main):012:0> r = a..b => "A".."B" irb(main):013:0> r.to_s => "A\u{422E2E}\x00\x00" irb(main):014:0> r.count => 16777217 irb(main):015:0> r.to_a [FATAL] failed to allocate memory C:\work> -- http://bugs.ruby-lang.org/