C语言写的UDP通信结构,接收到的数据存在char*,通过回调函数传到外层使用
如果接收到的数据为中文时,NSLog打印乱码
解决方法1:使用c语言接口iconv转换编码方式(GBK-UTF8)
在linux使用同样的c库,接收到的数据通过iconv转码,可以得到正常的中文显示
但是在ios中显示不正常,仍然为乱码
解决方法2:使用网上的例子,先将char*转换成NSData,在通过转码
NSData* data=[NSData dataWithBytes:char*a, strlen(a)];
NSStringEncoding gbk=CFStringConverNSStringEncodingToEncoding(kCFStringEncodingGB_2312_80);
NSString* str=[[NSString alloc]initWithBytes:[data bytes] length:[data length] encoding:NSUTF8StringEncoding];
还是乱码
使用
NSString *str1=[NSString stringWithCString:char*A encoding:gbk];
const char* str2=[str1 cStringUsingEncoding:NSUTF8StringEncoding];
NSLog(@"str2:%s", str2); //结果为乱码
通过网上将char*中文转换的资料测试
char testStr1[20];//="怎么转换编码";
memset(testStr1, 0x0, sizeof(testStr1));
strcpy(testStr1, "怎么转换编码");
NSLog(@"testStr1:%s", testStr1);
NSString *sv=[[NSString alloc] initWithCString:testStr1 encoding:gbk];
NSLog(@"sv:%@", sv);//这种方法在我工程中不能正常显示中文
------解决方案--------------------
在服务器端发送之前把数据转换成UTF8编码试下
------解决方案--------------------
发一段字节流数据的16进制值出来,我试下。
就是把一段数据的16进制值用下面的格式放上来:
ff 09 12 32 34
然后实际对应的汉字也放上来。