剛遇到乙個字元編碼的問題,折騰了一天.
檔案是用gb13080編碼的, android下面解析完全沒問題, 但是ios下使用以下**:
nsdata *data = [nsdata datawithcontentsoffile:url];
nsstring *s = [[nsstring alloc] initwithdata:data encoding:cfstringconvertencodingtonsstringencoding(kcfstringencodinggb_18030_2000)];
解析出來的字串始終為nil.
最後採用以下方法:
- (nsstring *)generategb18030stringbydeleteerrorrowsfromdata: (nsdata *)stringdata
} }// 2. 用此編碼解析字串並處理
// 2.1 解析資料,生成字串
nsstring *parsedstr = [[nsstring alloc] initwithdata:stringdata encoding:ec];
// 2.2 將字串分割成陣列
nsarray *parsedarr = [parsedstr componentsseparatedbystring:@"\n"];
nsmutablearray *willremovearr = [nsmutablearray array];
// 2.3 按行處理陣列
for (nsstring *linestr in parsedarr) }
// 3. 刪除無效的字串行
nsmutablearray *processedarr = [nsmutablearray arraywitharray:parsedarr];
[processedarr removeobjectsinarray:willremovearr];
// 4. 生成新的字串
nsmutablestring *processedstr = [nsmutablestring string];
for (nsstring *linestr in processedarr)
nsdata *processeddata = [processedstr datausingencoding:ec];
// 5. 將新的字串用gb_18030重新解碼
nsstring *resultstr = [[nsstring alloc]initwithdata:processeddata encoding:cfstringconvertencodingtonsstringencoding(kcfstringencodinggb_18030_2000)];
return resultstr;
}
最後查出資料中只有一行出了問題,大概是多了2個雙引號. iOS 關於unicode編碼
網路通訊過程中常用的的一種編碼及解碼的方法,算是簡單的加密.一 pragma mark 將nsstring轉化為unicode字串 nsstring turntounicodewith nsstring curstr return result uppercasestring 二 pragma ma...
關於字元編碼
美國人首先對其英文本元進行了編碼,也就是最早的ascii碼,用乙個位元組的低7位來表示英文的128個字元,高1位統一為0 後來歐洲人發現尼瑪你這128位哪夠用,比如我高貴的法國人字母上面的還有注音符,這個怎麼區分,得,把高1位編進來吧,這樣歐洲普遍使用乙個全位元組進行編碼,最多可表示256位。歐美人...
關於字元編碼
我們知道在學習php和jsp的時候,出現亂碼是經常性的事情,怎樣來一勞永逸的解決這個問題,我來做個總結。首先來了解一下字符集,我們關心的字符集大概有這麼幾個,iso 8859 1 gb2312 gbk utf 8,其中iso 8859 1是採用1個位元組進行編碼,而gb2312和gbk則是在其基礎之...