我使用的是ruby 1.9.2
我正在try 将包含一些法语单词(例如spécifié)的内容放入MySQL数据库.
当我读取CSV文件中的行时,
file_contents = CSV.read("csvfile.csv", col_sep: "$")
元素以ASCII-8BIT编码的字符串的形式返回(spécifié变成sp\xE9cifi\xE9),然后像"spécifié"这样的字符串就不能正确地保存到我的MySQL数据库中.
意思是"CSV-Yehuda Katz"表示二进制编码对ASCII数据的正确性.
所以,如果我试图让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".
我无法通过这样做将"非sp\xE9cifi\xE9"转换为"非spécifi"
因为我得到了这个错误:
Encoding::UndefinedConversionError: "\xE9" from ASCII-8BIT to UTF-8
,
Katz指出会发生这种情况,因为ASCII-8BIT并不是真正正确的字符串"编码".
Questions:
- Can I get CSV to read my file in the appropriate encoding? If so, how?
- How do I convert an ASCII-8BIT string to UTF-8 for proper storage in MySQL?