Project

General

Profile

Actions

Bug #6450

closed

Shift JIS で String#tr の範囲指定がおかしい

Added by 5.5 (5 5) almost 12 years ago. Updated almost 12 years ago.

Status:
Closed
Assignee:
-
Target version:
ruby -v:
ruby 1.9.3p202 (2012-04-27 revision 35484) [x86_64-darwin10.8.0]
Backport:
[ruby-dev:45652]

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 #1

Updated by naruse (Yui NARUSE) almost 12 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r35724.
5, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • enc/shift_jis.c (code_to_mbclen): return
    ONIGERR_INVALID_CODE_POINT_VALUE if the code is invalid.

  • enc/shift_jis.c (tr_next): increment character until the code
    is a valid character. [ruby-dev:45652] [Bug #6450]

Actions

Also available in: Atom PDF

Like0
Like0