[#49476] UTF-8 のスクリプト中で CP932 の正規表現オブジェクトが作りたい — "5.5" <5.5@...>
5.5 です。
4 messages
2013/07/01
[#49480] [ANN] Milkode 1.1 — ongaeshi <ongaeshi0621@...>
おんがえし です。
13 messages
2013/07/02
[#49508] OSXでRUBY-TKインストール出来た方いますか? — Tsuyoshi Uema <mugenkai_151e@...>
7.8年ぶりの書き込みです。
12 messages
2013/07/29
[#49509] Re: OSXでRUBY-TKインストール出来た方いますか?
— anfojp <anfojp@...>
2013/07/29
=1B$B$3$s$P$s$O!#=1B(B
[#49510] Re: OSXでRUBY-TKインストール出来た方いますか?
— Tsuyoshi Uema <mugenkai_151e@...>
2013/07/29
テツさん、ありがとうございます。
[#49511] Re: OSXでRUBY-TKインストール出来た方いますか?
— Tetsuya YUASA <tetsuya@...>
2013/07/31
こんにちは。
[#49513] Re: OSXでRUBY-TKインストール出来た方いますか?
— mugenkai_151e@...
2013/07/31
[ruby-list:49489] Re: UTF-8 のスクリプト中で CP932 の正規表現オブジェクトが作りたい
From:
"5.5" <5.5@...>
Date:
2013-07-07 06:52:36 UTC
List:
ruby-list #49489
なかむら(う)さん,西山和広さん
5.5 です。助言により解決しました。ありがとうございました。
ご返事がとても遅くなってすみません。
他の方の参考になるかもしれないので,私が何で悩み,何を勘違いした
のか記してみます。
ことの発端は次のようなコードでした。(かなり省略してます)
# encoding: utf-8
re=""
何か.each do |str|
re << str.encode("cp932")
end
regexp=Regexp.new(re)
これで出来た regexp を CP932 の文字列に使おうとしたときに,場合に
よって Encoding::CompatibilityError が出ることに悩まされました。
調べたところ,"ABC" とか "あいう" のようなものを与えると大丈夫なの
に,"\\p{Katakana}" などを与えると例外が出ていました。
このことと,いろいろ実験した結果から,Regexp.new にいろいろな文字列
オブジェクトを与えたときに出来る Regexp オブジェクトのエンコーディ
ングについて,以下のように考えました。
[A] CP932 の "あいう" を与える
→ CP932 の Regexp オブジェクト
[B] CP932,UTF-8 の "ABC" を与える
→ いずれも US-ASCII の Regexp オブジェクト
[C] CP932,UTF-8 の "\\p{Katakana}" を与える
→ スクリプトのエンコーディングと同じ Regexp オブジェクト
このうち [A] と [B] は正しく,[C] は勘違いでした。
なぜ勘違いしたかというと,上述のコードで,空文字列に CP932 の文字列
を concat したら当然 CP932 の文字列が出来るだろうと思い込んでいたか
らです。
実際は,UTF-8 の空文字列に CP932 の文字列を concat したとき,それが
ASCII 文字だけで出来ていれば UTF-8 のままなんですね。
※そもそも空文字列のエンコーディングに意味があるとすら思っていません
でした。
異なるエンコーディングの文字列を混ぜたときにどうなるかのルールはちょ
っとややこしいですね。ハマりどころです。
(13/07/01 16:08), U.Nakamura wrote:
> こんにちは、なかむら(う)です。
>
> In message "[ruby-list:49476] UTF-8 のスクリプト中で CP932 の正規表現オブジェクトが作りたい"
> on Jul.01,2013 15:48:43, <5.5@moji.gr.jp> wrote:
>> Regexp.#new の引数でエンコーディングを指定することもできません。
>
> Regexp.new(str.encode('cp932'))
>
>
> それでは。
>
--
5.5@moji.gr.jp