[IOS学习]使用URLRequest方法向服务器端发送数据无法保存中文的问题(3 位领导批示)

之前的一篇文章:使用URLRequest方法向服务器端发送数据 介绍了如何向服务器端提交数据,但在后来的实践中发现如果发送到服务器端的数据中含有中文就无法保存到数据库中。

我搜索了一下资料,原因很简单,之前的代码中:

1
NSData *requestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString length]];

dataWithBytes:[requestString UTF8String] 在这里我将发送的数据转为了UTF-8编码

而length:[requestString length]返回的字符串长度不是却是转换之前的.因为字符长度不正确(UTF-8中文字符占三个字节),所以提交过去的数据无法保存在数据库中。

只需要把这行改为:

1
NSData *requestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];

问题就解决了。

下面是引用:

1
2
3
-(NSUInteger)length  //返回字符串中Unicode字符的个数。
-(NSInteger)maximumLengthOfBytesUsingEncoding: (NSStringEncoding)enc  //返回当用enc对字符串进行编码存储时,所需要的最大字节数。
-(NSInteger)lengthOfBytesUsingEncoding: (NSStringEncoding)enc  //返回当用enc对字符串进行编码时,用于存储数组所需要的字节数。

[IOS学习]使用URLRequest方法向服务器端发送数据(3 位领导批示)

最近的工作中需要在应用程序中与服务器端进行数据通信,只是最简单的POST数据然后存入数据库。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        // 数据内容,存入字符串
	NSString *requestString = [NSString stringWithFormat:@"&userid=%d", userId];
	CCLOG(@"%@", requestString);
        // 数据内容转换为UTF8编码,第二个参数为数据长度
	NSData *requestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString length]];
        // 请求的URL地址
	NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://urlrequest.test/test.php"]];
        // 设置请求方式
	[request setHTTPMethod:@"POST"];
        // 设置请求内容
	[request setHTTPBody:requestData];
        // 设置请求头声明
	[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
 
        // 执行请求
	[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

服务器端就非常简章,获取POST数据存入数据库便可。

Tags : ,

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志