[#43494] ブロックとともに呼び出されたsortについて — "Toshiyuki Ogura" <oguradio@...>

小倉です。

12 messages 2007/05/15

[#43508] rubyのテキストについて — 桑江 康公 <ykuwae@...>

はじめまして、桑江といいます。プログラム開発の勉強をはじめたいと考えています。いろいろと調べたのですが、オブジェクト指向を使った開発が現在しりゅうとのことで、Javaを勉強しようと考えていたのですが、rubyという言語もあるということがわかりネットで調べたところこのメーリングリストにたどり着きました。どなたかプログラム開発初心者でもわかりやすい本またはサイトがありましたら教えていただけないでしょうか?ちなみに、私のレベルはHTMLが少しわかる程度です。

8 messages 2007/05/15

[ruby-list:43506] Re: UTF-8でtrがうまく機能しない

From: KIMURA Koichi <kimura.koichi@...>
Date: 2007-05-15 08:20:29 UTC
List: ruby-list #43506
木村です。
既に話の型がついちゃってるかもしれませんが。

On Tue, 15 May 2007 15:56:37 +0900
Fujioka <fuj@rabbix.jp> wrote:

> def str_upcase(str)
>   oldkcode=$KCODE
>   $KCODE="UTF-8"
> #1  result=str.tr("ャュョァィゥェォッ","ヤユヨアイウエオツ")
> #2  result=str.tr("ャュョァィゥェォ","ヤユヨアイウエオ").gsub(/ッ/,'ツ'))
>   result.gsub!(/ | |\r|\n|\t/,'')
>   $KCODE=oldkcode
>   result
> end
> p str_upcase("ホウジョウ ソウウン")
> 
> 以上のようなコードで#2は動作するのに
> #1は文字化けします。
> ッが何か関係しているのか思ってはいるのですが、
> よくわかっていません。

utf-8での、各文字のビットパターンを見るとこんな感じになります。

ヤ :: e3:83:a4
ャ :: e3:83:a3
ユ :: e3:83:a6
ュ :: e3:83:a5
ヨ :: e3:83:a8
ョ :: e3:83:a7
ア :: e3:82:a2
ァ :: e3:82:a1
イ :: e3:82:a4
ィ :: e3:82:a3
ウ :: e3:82:a6
ゥ :: e3:82:a5
エ :: e3:82:a8
ェ :: e3:82:a7
オ :: e3:82:aa
ォ :: e3:82:a9
ツ :: e3:83:84
ッ :: e3:83:83

ということと、tr は $KCODEの内容によらずバイトごとに置換を行うので
(これはFAQにあるとおり)、ッの最下位バイトの 0x83 と ツの最下位バイト
の 0x84のところでおかしくなるのでしょう(他の文字では0x83はそのまま
0x83に置き換わるパターンになっている)。

で、"ホウジョウソウウン"のほうは
ホ :: e3:83:9b
ウ :: e3:82:a6
ジ :: e3:82:b8
ョ :: e3:83:a7
ウ :: e3:82:a6
  :: e3:80:80
ソ :: e3:82:bd
ウ :: e3:82:a6
ウ :: e3:82:a6
ン :: e3:83:b3

ホとンに 0x83が含まれているので大当たり、と。

-- 
木村浩一


In This Thread