使用Ruby的fastercsv和字符编码

时间:2011-03-01 16:50:58

标签: ruby character-encoding fastercsv

使用Ruby 1.8.7,我想接受csv进入我的系统,即使这是一个管理应用程序,似乎我可以得到几种不同类型的csv。在我的Mac上,如果我使用“windows csv”选项从excel导出,则fastcsv可以默认读取它。在Windows上我似乎得到了utf-16编码的csvs(我还没弄明白如何解析)

允许用户上传可能采用utf8,utf16,ascii等类型格式的csv,检测和解析它们似乎是很常见的事情。有没有人想到这个?

我开始关注UniversalDetector来帮助我解决问题,然后使用Iconv进行转换,但这似乎很棘手并且希望有人想出来:)

1 个答案:

答案 0 :(得分:0)

根据FasterCSV's docsinitialize方法采用:encoding选项:

  

解析文件时使用的编码。默认为$ KDOCE设置。有效值:n??? or N ???没有,e??? or E ???对于EUC,s??? or S ???对于SJIS和u??? or U ???对于UTF-8(参见Regexp.new())。

由于列表有限,您可能希望使用iconv对内容进行预处理,然后将其传递给CSV。您可以使用Ruby的iconv(“Iconv”)接口或其命令行版本。 Iconv非常强大和灵活,能够转换UTF-16等。

实际上检测文档的编码更成问题,但命令行版本可以帮助您。如果我没记错,它可以帮助识别编码。它还可以在编码之间进行转换,或者,如果需要,可以告诉它转换为ASCII,转换为最接近的匹配字符,或完全忽略它们。

在处理不同的字符集时,Ruby 1.9.2比1.8.7更强大,因此您可能需要考虑升级。另外,为了更熟悉处理字符集和多字节字符的工具和问题,您应该阅读James Gray's blogs