From: "mame (Yusuke Endoh)" Date: 2012-04-06T23:50:02+09:00 Subject: [ruby-core:44159] [ruby-trunk - Bug #6258] String#succ has suprising behavior for "\u1036" (MYANMAR SIGN ANUSVARA), producing "\u1000" instead of "\u1037" Issue #6258 has been updated by mame (Yusuke Endoh). Assignee changed from akr (Akira Tanaka) to duerst (Martin D��rst) ---------------------------------------- Bug #6258: String#succ has suprising behavior for "\u1036" (MYANMAR SIGN ANUSVARA), producing "\u1000" instead of "\u1037" https://bugs.ruby-lang.org/issues/6258#change-25681 Author: dbenhur (Devin Ben-Hur) Status: Assigned Priority: Normal Assignee: duerst (Martin D��rst) Category: M17N Target version: ruby -v: ruby 1.9.3p125, ruby 1.9.2p180, "\u1036".succ.ord.to_s(16) # => "1000" Discovered when investigating StackOverflow question http://stackoverflow.com/questions/10020230/anomalous-behavior-while-comparing-a-unicode-character-to-a-unicode-character-range Range#=== ultimately invokes String#upto which uses String#succ ("\u1036".."\u1037").to_a.map{|c| c.ord.to_s(16)} => ["1036"] # expected ["1036","1037"] Also once #succ! proceeds past U+1036 it continues to produce U+1000 indefinitely irb(main):115:0> c = "\u1036" => "���" irb(main):116:0> c.ord.to_s(16) => "1035" irb(main):117:0> c.succ!.ord.to_s(16) => "1036" irb(main):118:0> c.succ!.ord.to_s(16) => "1000" irb(main):119:0> c.succ!.ord.to_s(16) => "1000" But if one starts naturally at U+1000 #succ! increments as expected irb(main):001:0> c = "\u1000" => "���" irb(main):002:0> c.ord.to_s(16) => "1000" irb(main):003:0> c.succ!.ord.to_s(16) => "1001" irb(main):004:0> c.succ!.ord.to_s(16) => "1002" -- http://bugs.ruby-lang.org/