我要实现的是将我的ios端的数据通过php写的服务端写入到数据库中,由于要写入中文信息,我php端都是用的gbk编码,但是测试的时候数据库中写入的一直是乱码,也无法匹配中文。我们知道在ios中设置data的编码时,NSStringEncoding默认是没有gbk这些编码的。
NSString*aString =@"这是一个测试string转GBK发送的字符串";
NSData*aData = [aString dataUsingEncoding:NSUTF8StringEncoding];
NSString*base64String = [aData base64EncodedStringWithOptions:0];
parameters[@"printcontent"] = [NSString stringWithFormat:@"T:%@",base64String];
[self.mgrPOST:followURL parameters:parameters progress:nil success:^(NSURLSessionDataTask* _Nonnulltask ,id_Nullable responseObject) {
NSLog(@"%@",responseObject);
}failure:^(NSURLSessionDataTask* _Nullabletask ,NSError* _Nonnullerror ) {
NSLog(@"err : %@",error);
}];
所以只能自己定义一个NSStringEncoding对象来转码。
按照上面的方法将代码修改如下:
NSString*aString =@"这是一个测试string转GBK发送的字符串";
NSStringEncoding gbkEncoding=CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSData*aData = [aString dataUsingEncoding: gbkEncoding];
NSString*base64String = [aData base64EncodedStringWithOptions:0];
parameters[@"printcontent"] = [NSString stringWithFormat:@"T:%@",base64String];
[self.mgrPOST:followURL parameters:parameters progress:nil success:^(NSURLSessionDataTask*_Nonnulltask,id_NullableresponseObject) {
NSLog(@"%@",responseObject);
}failure:^(NSURLSessionDataTask*_Nullabletask,NSError*_Nonnullerror) {
NSLog(@"err : %@",error);
}];
这样往服务器端发送的数据就是gbk编码的了,数据库中写入的也是中文了,也能正确匹配中文了。
网友评论