[英]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.