我正在使用ruby 1.9.2版本。
我试图解析包含一些法语单词(例如 spécifié)的CSV文件,并将其内容放入MySQL数据库中。
当我从CSV文件中读取行时,
file_contents = CSV.read("csvfile.csv", col_sep: "$")
元素以字符串形式返回,这些字符串是ASCII-8BIT编码的(spécifié变成了sp\xE9cifi\xE9),像“spécifié”这样的字符串无法正确保存到我的MySQL数据库中。Yehuda Katz说ASCII-8BIT实际上是指“二进制”数据,这意味着CSV不知道如何读取适当的编码。因此,如果我尝试强制CSV使用以下编码:file_contents = CSV.read("csvfile.csv", col_sep: "$", encoding: "UTF-8"),则会收到以下错误消息。ArgumentError: invalid byte sequence in UTF-8:
如果我回到我的原始ASCII-8BIT编码的字符串并检查我的CSV读取为ASCII-8BIT的字符串,它看起来像这样“Non sp \ xE9cifi \ xE9”而不是“Non spécifié”。
我不能通过这样做将“Non sp \ xE9cifi \ xE9”转换为“Non spécifié”"Non sp\xE9cifi\xE9".encode("UTF-8")
,因为我会得到这个错误:
Encoding::UndefinedConversionError:从ASCII-8BIT到UTF-8的"\xE9"
Katz指出,这将发生,因为ASCII-8BIT实际上不是一个正确的字符串“编码”。
问题:
- 我可以让CSV以适当的编码方式读取我的文件吗?如何做到?
- 如何将ASCII-8BIT字符串转换为UTF-8以便在MySQL中进行适当的存储?
C3 A9
,而不是E9
。看起来您正在处理ISO-8859-1编码。 - deceze