ios 字符串编码转换(utf-8 & gbk)问题

我们知道,使用NSURLConnection的代理方法下载网页,存到一个NSData中,

<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/" style="text-decoration: none; color: rgb(147, 233, 202);">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="text-decoration: none; color: rgb(147, 233, 202);">NSString</a> *pageSource = [[<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/" style="text-decoration: none; color: rgb(147, 233, 202);">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="text-decoration: none; color: rgb(147, 233, 202);">NSString</a> *pageSource = [[<a target=_blank rel="nofollow" href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/" style="text-decoration: none; color: rgb(147, 233, 202);">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编码的了,数据库中写入的也是中文了,也能正确匹配中文了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值