
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)
↑↑↑ここで上記のエラー発生する。
どうか宜しくお願いいたします。
No.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 では
エラーは発生しませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VisualStudio2022でC言語プログ...
-
コンボボックスの名前を変数に...
-
余剰演算子について教えてください
-
Variant型で宣言してるのにEmpt...
-
jsp~jspにhiddenを使って変数...
-
C言語でしりとりのプログラムを...
-
数値を浮動小数点32bitHEXコー...
-
世界のナベアツ
-
VBAの定数の使い方で、計算値を...
-
VB 配列の内容をファイルに書...
-
excelの、ある数式内の{}の意...
-
VB6で配列を文字列に変換する方...
-
C#で動的にコントロールを取得...
-
データ構造のmapとは?
-
VBAのチェックボックス結果を集...
-
2つの列で重複するキーの数と...
-
ラズベリーパイ B でgpioを使っ...
-
テキストボックスの値を変数に...
-
COLUMN(1:1)の意味を教え...
-
ラジオボタンの値の取得につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VisualStudio2022でC言語プログ...
-
Accessで文字列のバイト数読み込み
-
C言語で全角文字を扱いたいので...
-
HTML5では文中の半角不等号はち...
-
Cpadで文字化け
-
rubyの正規表現について
-
ruby 正規表現の日本語とアルフ...
-
VC2008+Qtの文字化け
-
英数半角文字と「-」を指定する...
-
Ruby1.9で文字列の置換がうまく...
-
open-uriを用いた、ウェブ上か...
-
アンダーバーとバックスラッシュ
-
エクセルで数字の変換
-
VBAでダブルコーテーション入り...
-
C言語 exitの使い方
-
エラーの意味は? Lvalue req...
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
VB6.0-整数と余りを求める
-
EXCEL/VBA 変数の値をクリップ...
おすすめ情報