在Ruby中读取包含特殊字符的CSV文件并存储到SQL Server中

时间:2015-05-12 12:24:08

标签: ruby sql-server csv special-characters ruby-2.0

我尝试将Ruby(2.0.0)中的CSV文件(UTF-8编码)导入到我的数据库(MSSQL 2008R2,COLLATION French_CI_AS),但特殊字符(法语口音)元音)未正确存储:éèçôü变为éèçôü(或其他类似的乱码)。

我使用这段代码来读取文件:

CSV.foreach(file, col_sep: ';', encoding: "utf-8") do |row|
   # ...
end

我在CSV选项(utf-8iso-8859-1windows-1252)中尝试了各种编码,但没有一个能正确存储特殊字符。

在您提问之前,我的数据库排序规则支持这些字符,因为我们已成功导入包含使用PHP导入程序的数据。如果我使用puts或文件记录器转储数据,那么一切都是正确的。

我的代码有问题,还是我需要指定别的东西(比如ruby类文件编码)?

由于

编辑:数据保存由PHP REST API完成,可以使用重音字符。它在收到数据时存储数据。

在Ruby中,我解析我的数据,将其存储在一个对象中,然后在我的PUT请求的主体中发送JSON编码的对象。但是,如果我直接从Ruby使用SQL查询,问题仍然存在:

query = <<-SQL
    UPDATE MyTable SET MyTable_title = '#{row_data['title']}' WHERE MyTable_id = '#{row_data['id']}'
SQL
res = db.execute query

1 个答案:

答案 0 :(得分:0)

我当时认为这与CSV文件中的编码类型有关,所以开始挖掘它。我确实发现windows-1252编码会插入控制字符。

您可以在此处详细了解:Converting special charactes such as ü and à back to their original, latin alphbet counterparts in C#