iOS POST请求 有中文的时候

镔哥,最近post请求遇到一些问题,当有中文的时候是请求不成功

下面镔哥写两种案例:

1:通常post请求:(有中文不成功)

//1:设置URL

NSString *host
= HOST;

NSString *usename =
@"fuck";

NSString *queryString = [NSString
stringWithFormat:@"/app/clickTableScreen?userName=%@&idfa=%@&operator=%@&systemVersion=%@&networkState=%@&deviceName=%@&memorySize=%@&model=%@",usename,adId,
[self
checkCarrier],phoneVersion,netStr,userPhoneName,totalDiskSpaceStr, [LoginViewController
deviceString]] ;

NSLog(@"querString:%@",queryString);

//完整的设置参数

NSString *urlString = [NSString
stringWithFormat:@"%@%@",host,queryString];

NSLog(@"参数:%@",urlString);

//得到完整的url

NSURL *url1 = [NSURL
URLWithString:urlString];

//2:Request请求

NSMutableURLRequest *request = [[NSMutableURLRequest
alloc]initWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10];

[request setHTTPMethod:@"POST"];

//第三步,连接服务器

NSError * error =
nil;

NSData *reqData  = [NSURLConnection
sendSynchronousRequest:request returningResponse:nil
error:&error];

//    //3:将请求转换二进制

//    NSData *reqData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

if(reqData ==
nil){

if(error){//这样写有个好处,就是如果解析数据不成功,系统会列出原因,我就因为写了这句话才知道出现什么原因:(Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo=0x14ed24c0 {NSUnderlyingError=0x)

NSLog(@"error = %@", error);

}

UIAlertView * alert = [[UIAlertView
alloc] initWithTitle:@"提示"
message:@"网络不稳定,请稍后尝试!"
delegate:nil
cancelButtonTitle:@"取消"
otherButtonTitles:@"ok",
nil];

[alert show];

return;

}else{

NSLog(@"error = %@", error);

}

NSDictionary *reqDic=[NSJSONSerialization
JSONObjectWithData:reqData options:NSJSONReadingAllowFragments
error:nil];

NSString *info = [NSString
stringWithFormat:@"%@",[reqDic
objectForKey:@"info"]];

NSLog(@"参数字典:%@",reqDic);

//4:打印数据

NSString *errcode = [NSString
stringWithFormat:@"%@", [reqDic
objectForKey:@"errcode"]];

if ([errcode isEqualToString:@"0"]) {

NSLog(@"成功了");

}else

{

UIAlertView *alert = [[UIAlertView
alloc]initWithTitle:@"获取广告标识符失败"
message:info delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil,
nil];

[alert show];

}

}

2:第二种写法对比(其实就是加了一句话)

/1:设置URL

NSString *host = HOST;

NSString *usename = @"fuck";

NSString *queryString = [NSString stringWithFormat:@"/app/clickTableScreen?userName=%@&idfa=%@&operator=%@&systemVersion=%@&networkState=%@&deviceName=%@&memorySize=%@&model=%@",usename,adId,
[self checkCarrier],phoneVersion,netStr,userPhoneName,totalDiskSpaceStr, [LoginViewController deviceString]]
;

NSLog(@"querString:%@",queryString);

//完整的设置参数

NSString *urlString = [NSString stringWithFormat:@"%@%@",host,queryString];

NSLog(@"参数:%@",urlString);

//得到完整的url

//有中文的时候要转码

NSString * urlstr = [urlString
stringByAddingPercentEscapesUsingEncoding:
NSUTF8StringEncoding];

NSURL * url = [NSURL
URLWithString:urlstr];

//2:Request请求

NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

[request setHTTPMethod:@"POST"];

//第三步,连接服务器

NSError * error = nil;

NSData *reqData  = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

//    //3:将请求转换二进制

//    NSData *reqData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

if(reqData == nil){

if(error){//这样写有个好处,就是如果解析数据不成功,系统会列出原因,我就因为写了这句话才知道出现什么原因:(Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" UserInfo=0x14ed24c0 {NSUnderlyingError=0x)

NSLog(@"error = %@", error);

}

UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"网络不稳定,请稍后尝试!"delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"ok", nil];

[alert show];

return;

}else{

NSLog(@"error = %@", error);

}

NSDictionary *reqDic=[NSJSONSerialization JSONObjectWithData:reqData options:NSJSONReadingAllowFragments error:nil];

NSString *info = [NSString stringWithFormat:@"%@",[reqDic objectForKey:@"info"]];

NSLog(@"参数字典:%@",reqDic);

//4:打印数据

NSString *errcode = [NSString stringWithFormat:@"%@", [reqDic objectForKey:@"errcode"]];

if ([errcode isEqualToString:@"0"]) {

NSLog(@"成功了");

}else

{

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"获取广告标识符失败" message:info delegate:selfcancelButtonTitle:@"确定" otherButtonTitles:nil, nil];

[alert show];

}

}

时间: 2024-07-30 08:24:45

iOS POST请求 有中文的时候的相关文章

iOS网络请求框架:MKNetWorkKit的使用

MKNetWorkKit是由一个印度小伙子写的,是用于网络请求的库,支持ARC,我fork了一下,代码的网址这里给出. 本人fork作者代码地址(DoubleYi):https://github.com/DoubleYi/MKNetworkKit 作者源码地址(MugunthKumar):https://github.com/MugunthKumar/MKNetworkKit 作者关于类库介绍的地址(MugunthKumar):http://blog.mugunthkumar.com/produ

javaweb解决post和get请求方式中文乱码问题(通用)

添加一个过滤器,解决乱码问题,代码如下: 1 import java.io.IOException; 2 import java.io.UnsupportedEncodingException; 3 import java.util.Map; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.FilterConfig; 8 import javax.servlet

SpringMVC 解决GET请求时中文乱码的问题

<filter>        <filter-name>CharacterEncoding</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param

详解get请求和post请求参数中文乱码的解决办法

首先出现中文乱码的原因是tomcat默认的编码方式是"ISO-8859-1",这种编码方式以单个字节作为一个字符,而汉字是以两个字节表示一个字符的. 一,get请求参数中文乱码的解决办法 对于get请求解决中文乱码有两种途径一种是修改tomcat默认的编码方式为"UTF-8" 在tomcat的server.xml里把 <Connector connectionTimeout="50000" port="8080" pro

在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码。

            在使用xutils时post请求传递中文到服务端Mysql数据库出现中文乱码. 这个问题困惑了我很久,也走了很多弯路.经过不断的探究终于找到了问题的解决方案. 第一:查看自己的mysql的编码.cmd->mysql –uroot –p -->输入自己的mysql的密码->输入 SHOWVARIABLES LIKE 'character%';(如果装mysql时默认安装的话,会出现很多latin1,而不是我下面的全部utf-8,这是因为mysql默认的编码是lati

在IOS 模拟器种输入中文

模拟器默认的配置种没有"小地球",只能输入英文.加入中文方法如下: 选择Settings--->General-->Keyboard-->International KeyBoards-->Add New Keyboard-->Chinese Simplified(PinYin) 即我们一般用的简体中文拼音输入法,配置好后,再输入文字时,点击弹出键盘上的"小地球"就可以输入中文了. 在IOS 模拟器种输入中文,布布扣,bubuko.co

使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)

前述: 在写这篇笔记之前,对笔记中的设计模式进行介绍: 本篇笔记中将要使用到的设计模式是:装饰(包装)设计模式 (1)装饰(包装)设计模式口诀: ①定义一个类,实现被装饰对象的接口 ②定义一个成员变量,记住被装饰对象的引用 ③定义构造方法,传入被装饰对象的实例 ④改写要修改的方法 ⑤不需要改写的方法,调用被装饰对象的原来的方法 (2)什么时候使用装饰设计模式 当我们需要对一个类进行增强的时候,增强后的类不再当前类的范畴 例如:现在有一个     Animal类     Cat和Dog都属于动物类

ios网络请求3840错误的问题

ios网络请求3840错误的问题 by 伍雪颖 Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (Unterminated string around character 11080.) UserInfo=0x171065d00 {NSDebugDescription=Unterminated string around charac

iOS开发-url包含中文报错解决办法

经常, 我们用通过这样的方法调用API. NSString* urlString = [NSString stringWithFormat:@"http://api.douban.com/v2/movie/search?q=%@", content]; NSURL *url = [NSURL URLWithString:urlString]; testRequest = [ASIHTTPRequest requestWithURL:url]; [testRequest setDeleg