用UTF-8文字读取红宝石中的csv

时间:2014-01-03 15:23:57

标签: ruby csv utf-8

我有这个csv文件

  file data.csv: 
  data.csv: ASCII text

这个文件有~10000行,带有一些UTF-8文字字符。

For example:
 1388357672.209253000,48:a2:2d:78:84:10,\xe5\x87\xb6\xe5\xb7\xb4\xe5\xb7\xb4\xe8\x87\xad\xe7\x98\xaa\xe7\x98\xaa\xe7\x9a\x84\xe6\x80\xaa\xe5\x85\xbd\xe5\x87\xba

我在Ruby中迭代这个文件并保存postgresql db中的每一行

File.open(filename, "r").each_line do |line|    
 CSV.parse(line, encoding: 'UTF-8') do |row|
  //Save to Postgresql
 end
end

我现在遇到的问题是UTF-8文字字符串保存在db中而不是正确的UTF-8字符串。我可以使用echo -e“line”转换每一行,但这需要很长时间。红宝石可以做这个任务吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

CSV.parse(line, encoding: 'UTF-8') do |row|
  row = row.map do |elem|
    elem.gsub(/\\x../) {|s| [s[2..-1].hex].pack("C")}.force_encoding("UTF-8")
  end
  //Save to Postgresql
end

答案 1 :(得分:0)

只需将每个单元格放在双引号中:

"\xe5\x87\xb6\xe5\xb7\xb4\xe5\xb7\xb4\xe8\x87\xad\xe7\x98\xaa\xe7\x98\xaa\xe7\x9a\x84\xe6\x80\xaa\xe5\x85\xbd\xe5\x87\xba"
=> "凶巴巴臭瘪瘪的怪兽出"