iOS文本文件的編碼檢測

windows上不少文本未必是用UTF8,因此在iOS上讀取的時候,如何獲得文件的編碼是個問題。網上有不少讀取中文的例子,可是那些不夠通用。好比說要讀取日文,韓文,阿拉伯文等等的時候,就不行了(雖然通常的app不必定會有這樣的需求)。html

NSString本身帶一個函數:python

+ (instancetype)stringWithContentsOfURL:(NSURL *)url usedEncoding:(NSStringEncoding *)enc error:(NSError **)error;

若是String建立成功,enc會返回使用的NSStringEncoding。可是這個方法對於NSStringEncoding之外的編碼都不必定能成功建立NSString,同時也不會返回error。
Apple 的官方文檔提供了讀取未知encoding數據的一些參考步驟ios

簡單的總結,就是不停的用encoding去測試。這其中有個小技巧,根據程序面向的用戶,把用到的encoding按可能性排列下,這樣最有但願得到須要的結果。
雖然Apple的文檔給出了這樣的解決方案,可是發現不少閱讀App讀取各類編碼方式的文件,毫無壓力。所以,這裏必定有其餘方法。問了某道友,說chardet能夠,但是一搜,發現是python實現!雖然沒結果,不過我發現這是個很是廣泛的問題。因而,再次搜索查找,找到了BOM,找到了mozzilla charset detector,找到了uchardet。uchardet的源碼在github上。他的基本原理好像也是用編碼去檢測,誰先返回,就確認是哪一個編碼(這裏不肯定,未深究)。git

項目是C/C++實現,直接添加進iOS工程,記得修改使用到的文件後綴爲mm,運行後測試,發現能很好的識別我遇到的幾種編碼文件。項目中有使用的例子,就不貼圖說明使用過程了。github

須要說明的是,對於須要使用kCFStringEncodingGB_18030_2000來建立的中文文本,識別出來的竟然是IBM855。 google了下,也不知道IBM855是啥意思。爲了趕時間,暫時對須要的幾種編碼作了映射。windows

若是有哪位知道的,麻煩指點指點,這裏先謝過了。app

 

本文已同步到: http://icocoa.tk/2013/11/16/ios文本文件的編碼檢測/,歡迎訪問函數

相關文章
相關標籤/搜索