|
[ruby-list:42443] 日本語でのString#casecmpの利用について: msg#00097lang.ruby.japanese
片桐@ユービットと申します。 Shift_JISでエンコードされたひらがなや漢字を含む文字列に対して、 String#casecmpを使用するとどのような動作が期待できるのでしょうか? ruby 1.8.1 (2003-12-25) [i686-linux]をRedHat Linux 9上で、 $KCODE = "S" "\202\320".casecmp("\202\323") を実行すると"0"が帰ってきます。"\202\320"と"\202\323"は、それぞれ、Shift_JIS で、"ひ"と"ふ"になります。 "ひ"や"ふ"でそれぞれ、downcaseやupcaseメソッドを実行すると元の文字列と同じ文 字列が帰ってきます。 他のバージョンのrubyにおいても文字は違いますが、同様の現象を確認することがで きました。(このメールの最後に自分が使用したコードがあります。) ひらがなや漢字などが含む文字列に対しては、String#casecmpを使用してはいけない のでしょうか? 以上、宜しくお願いします。 ----- 片桐英人 <eito-HWss5khfY+4@xxxxxxxxxxxxxxxx> -----以下、テストコード----- $KCODE = "S" require "test/unit" class TC_String < Test::Unit::TestCase def test_casecmd # Creates an array of all hiraganas hiragana = ["\202\240"] # Shift_JIS encoded hiragana 'a' 81.times do hiragana << hiragana.last.succ end errors = [] hiragana.each do |src| hiragana.each do |dst| if src == dst if src.casecmp(dst) != 0 error = "\"#{src}\".casecmp(\"#{dst}\") should return 0." error << " (upcase: \"#{src.upcase}\", \"#{dst.upcase}\")" error << " (downcase: \"#{src.downcase}\", \"#{dst.downcase}\")" errors << error end else if src.casecmp(dst) == 0 error = "\"#{src}\".casecmp(\"#{dst}\") should not return 0." error << " (upcase: \"#{src.upcase}\", \"#{dst.upcase}\")" error << " (downcase: \"#{src.downcase}\", \"#{dst.downcase}\")" errors << error end end end end assert(errors.empty?, errors.join("\n")) end end
|
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | [ruby-list:42442] rubyで多次元配列の作り方, Yoshihiro Sugihara |
|---|---|
| Next by Date: | [ruby-list:42444] Re: rubyで多次元配列の作り方, Ken'ichi Saitou |
| Previous by Thread: | [ruby-list:42442] rubyで多次元配列の作り方, Yoshihiro Sugihara |
| Next by Thread: | [ruby-list:42445] Re: 日本語でのString#casecmpの利用について, Yukihiro Matsumoto |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |