1166 次
4 に答える
1
値にアクセスでき、CSV から読み取ることができる場合は、次のようなヘルパーを使用できます。
def ascii_only(string)
encoding_options = {
:invalid => :replace, # Replace invalid byte sequences
:undef => :replace, # Replace anything not defined in ASCII
:replace => '', # Use a blank for those replacements
:UNIVERSAL_NEWLINE_DECORATOR => true # Always break lines with \n
}
string.encode Encoding.find('ASCII'), encoding_options
end
于 2013-10-29T05:11:34.463 に答える
1
使用している Ruby のバージョンが不明です。1.9.3以上だと思います。
これを使用して、CSV ファイルが保存されているエンコードを強制してみてください
force_encoding(encoding)
于 2013-10-29T05:05:01.887 に答える
0
やりたいことは、カスタム CSV コンバーターを作成し、foreach を呼び出すときにオプション ハッシュでそのコンバーターを参照することです。
カスタム コンバーター:
#define custom converter to eliminate non ASCII characters
CSV::Converters[:only_ascii] = lambda{|s|
begin
s.force_encoding("utf-8").encode("utf-8", "binary", :replace => "", :undef => :replace, :invalid => :replace)
rescue
s
end
}
そして、あなたのオプションのハッシュで:
CSV.foreach(file.path, headers: true, converters: [:only_ascii]) do |row|
Yadda yadda
end
ここで、それらを空白の代わりに合理的な ASCII 同等物に置き換えたい場合は、これを行うカスタム関数を記述してから、カスタム コンバーターで :replace => "" と記述している場合、:replace => you_custom_method_name_here を実行します。
于 2014-03-03T19:30:52.703 に答える
0
Ruby 1.9.3 または 2.0 では問題を再現できません。私はこのテストコードを書きました:
require 'csv'
CSV.foreach('test.csv') do |row|
puts row
end
そして、この test.csv ファイルを作成しました:
char
™
®
コードを実行すると、文字が正しく表示されます。
于 2013-10-29T05:29:08.473 に答える