使用Ruby上载文件字符集转换

时间:2009-11-24 22:11:25

标签: ruby csv file-upload character-encoding iconv

我有一个应用程序,我们让客户将csv文件上传到我们的服务器。然后我们处理并将来自csv的数据放入我们的数据库中。我们遇到了一些char-sets的问题,特别是当我们处理JSON时,特别是一些未转换的UTF-8字符在JSON响应中打破了IE。

有没有办法在我们开始处理之前将上传的csv文件转换为UTF-8?有没有办法确定上传文件的字符编码?我玩过iconv但我们并不总是确定上传文件的编码方式。感谢。

1 个答案:

答案 0 :(得分:2)

这个解决方案可能并不理想,但应该做好。

首先,成分:

  • chardet(sudo gem install chardet
  • fastercsv(sudo gem install fastercsv

现在是实际代码(未经测试):

require 'rubygems'
require 'UniversalDetector'
require 'fastercsv'
require 'iconv'

file_to_import = File.open("path/to/your.csv")
# determine the encoding based on the first 100 characters
chardet = UniversalDetector::chardet(file_to_import.read[0..100])
if chardet['confidence'] > 0.7
  charset = chardet['encoding']
else 
  raise 'You better check this file manually.'
end
file_to_import.each_line do |l| 
  converted_line = Iconv.conv('utf-8', charset, l)
  row = FasterCSV.parse(converted_line)[0]
  # do the business here
end