【问题标题】:FasterCSV and Non-Latin CharactersFasterCSV 和非拉丁字符
【发布时间】:2010-11-09 16:09:15
【问题描述】:

Iv 最近编写的代码将帮助我使用 FasterCSV 和 rails 将 SQL 数据库导出为 CSV。但是我的数据库的某些部分包含繁体中文字符。当我导出它时,我得到了??????作为 CSV 文件中的输出。我已经尝试更改 $KCODE = 'u' 以便 FasterCSV 使用 UTF-8 对 CSV 文件进行编码,但没有运气。转换编码的 Iconv 也给了我奇怪的结果。以下是源代码:

def csv
@lists = Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions =>  ["name LIKE ?", "%#{params[:selection]}%"])

csv_string = FasterCSV.generate do |csv|
  csv << [<bold> "Status","Name","Summary","Description","Creator","Comment","Contact Information","Created Date","Updated Date"]

  @lists.each do |project|
    csv << [project.status, project.name, project.summary, project.description, project.creator, project.statusreason, project.contactinfo, project.created_at, project.updated_at]
  end
end

filename = Time.now.strftime("%Y%m%d") + ".csv"
send_data(csv_string,
  :type => 'text/csv; charset=utf-8; header=present',
  :filename => filename)

结束

谢谢,

【问题讨论】:

    标签: ruby-on-rails fastercsv


    【解决方案1】:

    我不习惯使用中文字符,但您可以尝试在generate 调用中将:encoding 选项添加到'u' (UTF-8):

    ...
    csv_string = FasterCSV.generate(:encoding => 'u') do |csv|
    ...
    

    作为旁注,我建议使用 named_scopes 而不是这样写:

    Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions =>  ["name LIKE ?", "%#{params[:selection]}%"])
    

    祝你好运!

    【讨论】:

    • 谢谢!那行得通。但是,当我在 MS excel 中打开它时,我仍然得到 ????作为输出。我猜它与excel有关,而不是我在rails中的导出选项。感谢您的提示,我已将该部分更改为命名范围。
    • Excel 要求编码为 ANSI。以防万一,尝试将:encoding 设置为“e”或“s”,并查看 excel 是否能够打开它们。如果没有,您可以尝试手动将 UTF8 转换为 ANSI - 请参阅 stackoverflow.com/questions/263271/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多