Actions
Bug #6450
closedShift JIS で String#tr の範囲指定がおかしい
Description
=begin
CP932(Windows-31J)は,第二バイトが 0x7F になる文字が存在しない仕組みになっていますが,以下の例のように,String#tr で範囲指定を使うと,そのような文字が存在するかのような動作になります。
encoding: cp932¶
p "マミムメモ".tr("マ-モ", "マ-モ") # => "マミメモモ"
p "マミムメモ".tr("マ-モ", "マ-モ") # => "マミ\x83\x7Fムメ"
p "мнопр".tr("а-я", "А-Я") # => "МНПРС"
p "МНОПР".tr("А-Я", "а-я") # => "мн\x84\x7Fоп"
この例では,文字コード表で,全角片仮名「ミ」と「ム」の間,およびキリル文字小文字の「н」と「о」の間に文字が存在するかのように置換してしまっています。
これが仕様だとすると,String#tr を使うのに文字の並び順の知識だけでなく,どのようなバイト列に符号化されるかといった知識まで必
要となり,非常に使いづらいと思います。
=end
Actions
Like0
Like0