【轉】ios字符串編碼轉換(utf-8 & gbk)問題

前端部分來自參考資料: 我的地盤 CALL ME SING,STEVEN SING!!

我們知道,使用NSURLConnection的代理方法下載網頁,存到一個NSData中,

<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/" style="color: rgb(190, 106, 20); text-decoration: none;">NSMutableData</a> *pageData;
[pageData appendData:data];

如果網頁編碼是UTF-8的,可以這麼轉換爲字符串:

<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/" style="color: rgb(190, 106, 20); text-decoration: none;">NSString</a> *pageSource = [[<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/" style="color: rgb(190, 106, 20); text-decoration: none;">NSString</a> alloc] initWithData:pageData encoding:NSUTF8StringEncoding];

如果網頁是gbk(或者gb2312),用UTF8轉換的話,pageSource返回nil。這時需要使用gbk編碼做轉換,但是NSStringEncoding不含gbk,怎麼辦?用另一個方法處理一下:

<span style="color:#ff0000;"><strong>NSStringEncoding gbkEncoding = 
CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);</strong></span>
<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/" style="color: rgb(190, 106, 20); text-decoration: none;">NSString</a> *pageSource = [[<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/" style="color: rgb(190, 106, 20); text-decoration: none;">NSString</a> alloc] initWithData:pageData encoding:<span style="color:#ff0000;"><strong>gbkEncoding</strong></span>];
爲什麼可以這麼處理?在NSString.h(按住command,雙擊NSStringEncoding即能查看),對NSStringEncoding的定義中,註釋這麼寫着:
<span style="white-space: normal;">Note that in addition to the values explicitly listed below, NSStringEncoding supports encodings provided by CFString.</span>
<span style="white-space: normal;">See CFStringEncodingExt.h for a list of these encodings.</span>
<span style="white-space: normal;">See CFString.h for functions which convert between NSStringEncoding and CFStringEncoding.

========================================================================================

我要實現的是將我的ios端的數據通過php寫的服務端寫入到數據庫中,由於要寫入中文信息,我php端都是用的gbk編碼,但是測試的時候數據庫中寫入的一直是亂碼,也無法匹配中文。
後來發現是我ios端往php端發送數據是用的編碼不對。我們知道在ios中設置data的編碼時,<span style="color:#ff0000;"><strong>NSStringEncoding</strong></span>默認是沒有gbk這些編碼的,如圖:
</span>
ios字符串編碼轉換(utf-8  gbk)問題[參考] - 〇①世界 - 雲端的小牛牛

所以只能自己定義一個NSStringEncoding對象來轉碼。
按照上面的方法將代碼修改如下:
NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
 [request setHTTPBody:[body dataUsingEncoding:gbkEncoding]]; 
 
這樣往服務器端發送的數據就是gbk編碼的了,數據庫中寫入的也是中文了,也能正確匹配中文了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章