3

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

允许用户上传可能是 utf8、utf16、ascii 等类型格式的 csv、检测和解析它们似乎是一件很常见的事情。有没有人弄清楚这一点?

我开始看 UniversalDetector 来帮助我检测,然后使用 Iconv 进行转换,但这似乎很棘手,希望有人能弄清楚:)

4

1 回答 1

0

根据FasterCSV 的文档,该initialize方法有一个:encoding选项:

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

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

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

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

于 2011-03-02T03:08:32.410 回答