重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Ruby1.9で文字列の置換がうまくいきません。

以下の処理を実行すると、gsubのところでEncooding::CommpatibillityError
とエラーが発生してうまく置換が出来ません。
何が原因でしょうか。あるいはもっと簡単な方法で置換する方法がありましたら
ご教示のほどお願いいたします。

<仕様>
半角、全角に関係なく指定文字で置換する。

※大文字部分は実際は全角文字です。
moji1 = 1abc56abcABC"
moji2 = "abc"
moji3 = "CBA"
⇒正しい置換結果は、"1CBA56CBAABC"

#半角→全角 空白含
moji2 = moji2.tr('a-zA-Z0-9 - ', 'a-zA-Z0-9 - ')
moji2 = NKF::nkf( '-SsXm0', moji2 )

data = moji1.gsub(moji2,moji3)
      ↑↑↑ここで上記のエラー発生する。

どうか宜しくお願いいたします。

A 回答 (1件)

プログラムを書かれている文字コードは何でしょうか?



moji2 = NKF::nkf( '-SsXm0', moji2 )でShift-JISのStringがmoji2に代入されますが、moji1やmoji3は他のエンコードのStringが代入されているのでエンコードが一致しないというエラーになっているのだと思います。


私の環境(Windows VISTA)では以下の様になりました。

# coding: Windows-31J だと

test.rb:20:in `gsub': incompatible encoding regexp match (Shift_JIS regexp with
Windows-31J string) (Encoding::CompatibilityError)
from test.rb:20:in `<main>'
となったので

moji2 = NKF.nkf( '-SsXm0', moji2 )
moji2 = moji2.encode('Windows-31J') ←この行を追加してエンコードを一致させるとエラーは無くなりました。


# coding: shift_jis では
エラーは発生しませんでした。
    • good
    • 0
この回答へのお礼

'Windows-31J'で解決しました。有難う御座いました。

お礼日時:2010/07/26 12:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!