我有这个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”转换每一行,但这需要很长时间。红宝石可以做这个任务吗?
答案 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"
=> "凶巴巴臭瘪瘪的怪兽出"