我尝试将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-8
,iso-8859-1
,windows-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
答案 0 :(得分:0)
我当时认为这与CSV文件中的编码类型有关,所以开始挖掘它。我确实发现windows-1252编码会插入控制字符。