『导言』
iOS开发中,对于请求网络数据时候,经常需要处理编码转码问题?经常出现NSUTF8StringEncoding
字样,在NSData和NSString的转换中如何用?
-
NSUTF8StringEncoding
编码与解码?
- 编码: 使
汉字
** →** 含%
的字符串
NSString *nameStr = [[NSString alloc]init];
nameStr = [nameStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
- ** 解码**:使
汉字
← 含%
的字符串
NSString *transString = [NSString stringWithString:[string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
-
NSSData
和NSString
的相互转换?
- str转data:
initWithData: encoding:
- 用法
NSString *str = @"username=zwj&pwd=123&type=JSON";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
-
data转str:
dataUsingEncoding:
- 用法
NSString *str2 = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
-
网址含
汉字
如何转码?str->str
- str转str:
stringByAddingPercentEscapesUsingEncoding:
- 用法:
NSString *str = @"http://120.25.226.186:32812/login2?username=文娟&pwd=520it&type=JSON";
str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-
POST
和GET
请求,何时需要转码?
GET请求:
* 若url的`路径参数`含有`汉字`,需要`转码`;
* 例1:参数中含有`汉字`为`小码哥`
NSString *str = @"http://120.25.226.186:32812/login2?username=小码哥&pwd=520it&type=JSON";
str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-
POST请求:
- 若url的
域名
含有汉字
,进行转码
。 -
HTTPBody
请求体:已经进行了编码,所以不需要转码。
例2:
- 若url的
request.HTTPBody = [@"username=小码哥&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];
-
总结:
str
转data
:
initWithData: encoding:
data
转str
:
dataUsingEncoding:
> * `str`转`str`:
stringByAddingPercentEscapesUsingEncoding:
-
链接
<1>.NSSData和NSString的相互转换
<2>.iOS开发中,如何转码字符串NSString或者网址str?