簡體   English   中英

使用Ruby的fastercsv和字符編碼

[英]Using Ruby's fastercsv with character encodings

使用Ruby 1.8.7,我想接受csv進入我的系統,即使這是一個管理應用程序,似乎我可以得到幾種不同類型的csvs。 在我的Mac上,如果我使用“windows csv”選項從excel導出,則fastcsv可以默認讀取它。 在Windows上我似乎得到了utf-16編碼的csvs(我還沒弄明白如何解析)

允許用戶上傳可能是utf8,utf16,ascii等類型格式的csv,檢測並解析它們似乎是一件非常普遍的事情。 有沒有人想到這個?

我開始看UniversalDetector來幫我解析,然后使用Iconv轉換,但這似乎很棘手,並希望有人想出來:)

根據FasterCSV的文檔initialize方法采用:encoding選項:

解析文件時要使用的編碼。 默認為$ KDOCE設置。 有效值: n??? or n??? or N ??? 沒有, e??? or e??? or E ??? 對於EUC, s??? or s??? or S ??? 對於SJIS, u??? or 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的博客

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM