私は本番環境のどこかにアクセスできないファイルを持っています.Rubyスクリプトでロードすると、内容に対する正規表現はArgumentError => invalid byte sequence in UTF-8
.
ここにすべてのポイントがある回答に基づいて修正したと思います: ruby 1.9: UTF-8 の無効なバイト シーケンス
# Remove all invalid and undefined characters in the given string
# (ruby 1.9.3)
def safe_str str
# edited based on matt's comment (thanks matt)
s = str.encode('utf-16', 'utf-8', invalid: :replace, undef: :replace, replace: '')
s.encode!('utf-8', 'utf-16')
end
ただし、rspec をビルドして、コードが機能することを確認したいと考えています。問題の原因となったファイルにアクセスできないため、プログラムでエンコードの悪い文字列を作成したいと考えています。
次のようなバリエーションを試しました:
bad_str = (100..1000).to_a.inject('') {|s,c| s << c; s}
bad_str.length.should > safe_str(bad_str).length
また、
bad_str = (100..1000).to_a.pack(c*)
bad_str.length.should > safe_str(bad_str).length
しかし、長さは常に同じです。また、さまざまな文字範囲を試しました。常に 100 から 1000 ではありません。
Ruby 1.9.3 スクリプト内で無効なエンコーディングを使用して文字列を作成する方法について何か提案はありますか?