ruby 中的 csv 文件编码问题
csv file encoding issue in ruby
我使用 ruby 解析 csv 文件并收到错误
invalid byte sequence in utf-8 csv
我尝试使用编码选项
CSV.foreach(path, {headers: true, encoding: 'windows-1251:utf-8'}) do |row|
new_row = {}
headers = []
row.each do |k,v|
headers << k
v = v.force_encoding('UTF-8') || ''
v.gsub! "\xE2\x80\x96", "-"
v.gsub! "\xE2\x80\x93", "-"
v.gsub! "\xE2\x80\x94", "-"
v.gsub! "\xE2\x80\x95", "-"
v.gsub! "\xE2\x80\x98", "'"
v.gsub! "\xE2\x80\x99", "'"
v.gsub! "\xE2\x80\x9C", "\""
v.gsub! "\xE2\x80\x9D", "\""
v.gsub! "\xE2\x80\xA6", "..."
v.gsub! "\x0D\x0A", "\n"
v.gsub! "\xC2\xA0", " "
v.gsub! "\xC2\xB0", " "
new_row[k] = v
end
output_csv.puts headers if output_csv.header_row?
output_csv.puts new_row
end
现在我得到了
incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
CSV 文件中引发此问题的字符串是 "G�ran"
下面是示例输入行
David Evans & Assocs www.deainc.com 13858534 jpv@deainc.com G�ran Volk 5034990383
任何人都可以建议我如何解决这个问题。
这个问题很可能是由于保存 文件编码错误引起的。比如说,你的文件中有 unicode 符号“★”。将其保存为 ASCII
或 Latin1
或其他每个符号 1 个字节的编码,您 会丢失一些数据 。
符号“�”被称为replacement character。它用于表示“这里是在编码转换过程中显然丢失的 unicode。”
我使用 ruby 解析 csv 文件并收到错误
invalid byte sequence in utf-8 csv
我尝试使用编码选项
CSV.foreach(path, {headers: true, encoding: 'windows-1251:utf-8'}) do |row|
new_row = {}
headers = []
row.each do |k,v|
headers << k
v = v.force_encoding('UTF-8') || ''
v.gsub! "\xE2\x80\x96", "-"
v.gsub! "\xE2\x80\x93", "-"
v.gsub! "\xE2\x80\x94", "-"
v.gsub! "\xE2\x80\x95", "-"
v.gsub! "\xE2\x80\x98", "'"
v.gsub! "\xE2\x80\x99", "'"
v.gsub! "\xE2\x80\x9C", "\""
v.gsub! "\xE2\x80\x9D", "\""
v.gsub! "\xE2\x80\xA6", "..."
v.gsub! "\x0D\x0A", "\n"
v.gsub! "\xC2\xA0", " "
v.gsub! "\xC2\xB0", " "
new_row[k] = v
end
output_csv.puts headers if output_csv.header_row?
output_csv.puts new_row
end
现在我得到了
incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)
CSV 文件中引发此问题的字符串是 "G�ran"
下面是示例输入行
David Evans & Assocs www.deainc.com 13858534 jpv@deainc.com G�ran Volk 5034990383
任何人都可以建议我如何解决这个问题。
这个问题很可能是由于保存 文件编码错误引起的。比如说,你的文件中有 unicode 符号“★”。将其保存为 ASCII
或 Latin1
或其他每个符号 1 个字节的编码,您 会丢失一些数据 。
符号“�”被称为replacement character。它用于表示“这里是在编码转换过程中显然丢失的 unicode。”