[ruby-dev:49637] 重要: 非互換性の可能性 Fwd: [ruby-cvs:62388] duerst:r55225 (trunk): * string.c: Activate full Unicode case mapping for UTF-8

From: Martin J. Dürst <duerst@...>
Date: 2016-05-31 01:37:16 UTC
List: ruby-dev #49637
下記の通り、大文字小文字変換を UTF-8 において ASCII 
だけからユニコード全体に変換しました。これにより、一部非互換性が出る可能性があります。

一例で見せますと、r55224 までは次の通り:

'résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase
                         # -> 'RéSUMé ĭñŧėřŋãţijňőńæłĩżàťïōņ'

それに対して、 r55225 以降は次の通り:

'résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase
                         # -> 'RÉSUMÉ ĬÑŦĖŘŊÃŢIJŇŐŃÆŁĨŻÀŤÏŌŅ'

一般の場合、後者が好ましいので、まつもとさんがわざわざそのように提案しました(https://bugs.ruby-lang.org/issues/10085#note-5 
参照).

しかし、例外があります。例えば DNS のサーバの場合です。その場合、今まで通り ASCII 
のみ変換を行いたいでしょう (https://bugs.ruby-lang.org/issues/10085#note-9 参照). 
これは次のようにできます:

'résumé ĭñŧėřŋãţijňőńæłĩżàťïōņ'.upcase(:ascii)
                         # -> 'RéSUMé ĭñŧėřŋãţijňőńæłĩżàťïōņ'

必ず ASCII のみの変換が必要な場合、上記のように :ascii オプションを使ってください。 
(扱うデータが既に全て ASCII の場合、オプションを付ける必要はありません。)

オプションについての詳しい説明は String#downcase の説明にありますが、全ての大文字小文字変換のメソッド 
(upcase/downcase/capitalize/swapcase) に共通です。

UTF-8 以外の文字コードのための実装はこれから追加されます。

よろしくお願いします。   Martin.


-------- Forwarded Message --------
Subject: [ruby-cvs:62388] duerst:r55225 (trunk): * string.c: Activate 
full Unicode case mapping for UTF-8 by removing
Date: Tue, 31 May 2016 01:10:07 +0000
From: duerst@ruby-lang.org
To: ruby-cvs@ruby-lang.org

duerst	2016-05-31 10:10:06 +0900 (Tue, 31 May 2016)

   New Revision: 55225

   https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=55225

   Log:
     * string.c: Activate full Unicode case mapping for UTF-8 by removing
       the protective check for the presence of an option.
       Update documentation.
     * test/ruby/enc/test_case_comprehensive.rb: Adjust tests for above 
change.

   Modified files:
     trunk/ChangeLog
     trunk/string.c
     trunk/test/ruby/enc/test_case_comprehensive.rb
.

In This Thread

Prev Next