当前位置: 代码迷 >> Iphone >> udp接收数据显示中文乱码,大家帮帮忙,指导指导,多谢
  详细解决方案

udp接收数据显示中文乱码,大家帮帮忙,指导指导,多谢

热度:33   发布时间:2016-04-25 05:53:36.0
udp接收数据显示中文乱码,大家帮帮忙,指导指导,谢谢
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 

然后实际对应的汉字也放上来。
  相关解决方案