weixin_38137714
2017-08-29 02:00data utf8转成字符串,WiFi下没问题,流量的时候字符串会变成空,什么原因?
NSString *recvMessage = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 转成字符串,WiFi下没问题,流量的时候字符串会变成空,什么原因?
然后找了一个替换非法字符的方法,在流量情况下,显示data里有非法字符,WiFi下没问题,什么原因?
-
(NSData *)replaceNoUtf8:(NSData *)data
{
char aa[] = {'A','A','A','A','A','A'}; //utf8最多6个字符,当前方法未使用
NSMutableData *md = [NSMutableData dataWithData:data];
int loc = 0;
while (loc < [md length])
{
char buffer;
[md getBytes:&buffer range:NSMakeRange(loc, 1)];
if ((buffer & 0x80) == 0) //0xxx xxxx 1个Byte
{
loc++;
continue;
}
else if ((buffer & 0xE0) == 0xC0) //110x xxxx 2个Byte
{
loc++; //此处可能越界,要判断
if (loc >= md.length) { //此时的buffer已经是最后一个Byte
loc--;
//非法字符,将这个字符(一个byte)替换为A
NSLog(@"非法字符 %@",md);
[md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
break;
}
[md getBytes:&buffer range:NSMakeRange(loc, 1)];
if ((buffer & 0xC0) == 0x80) //10xx xxxx 第2个Byte
{
loc++;
continue;
}
loc--;
//非法字符,将这个字符(一个byte)替换为A
NSLog(@"非法字符 %@",md);
[md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
loc++;
continue;
}
else if ((buffer & 0xF0) == 0xE0) //1110 xxxx 3个Byte
{
loc++; //此处可能越界,要判断
if (loc >= md.length) { //此时的buffer已经是最后一个Byte
loc--;
//非法字符,将这个字符(一个byte)替换为A
NSLog(@"非法字符 %@",md);
[md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
break;
}
[md getBytes:&buffer range:NSMakeRange(loc, 1)];
if ((buffer & 0xC0) == 0x80) //10xx xxxx 第2个Byte
{
loc++; //此处可能越界,要判断
if (loc >= md.length) { //此时的buffer已经是最后一个Byte
loc--;
//非法字符,将这个字符(一个byte)替换为A
NSLog(@"非法字符 %@",md);
[md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
break;
}
[md getBytes:&buffer range:NSMakeRange(loc, 1)];
if ((buffer & 0xC0) == 0x80) //10xx xxxx 第3个Byte
{
loc++;
continue;
}
loc--;
}
loc--;
//非法字符,将这个字符(一个byte)替换为A
NSLog(@"非法字符 %@",md);
[md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
loc++;
continue;
}
else
{
//非法字符,将这个字符(一个byte)替换为A
NSLog(@"非法字符 %@",md);
[md replaceBytesInRange:NSMakeRange(loc, 1) withBytes:aa length:1];
loc++;
continue;
}
}return md;
}
- 点赞
- 回答
- 收藏
- 复制链接分享
0条回答
为你推荐
- Golang用特殊字符截断字符串而不会破坏数据
- utf-8
- 2个回答
- 在Go中使用C库时,如何正确地将UTF-8编码的char数组转换为Go字符串?
- cgo
- utf-8
- 2个回答
- 清理错误的UTF-8字符串
- string
- utf-8
- utf
- 3个回答
- 求助:使用生成的Golang DLL返回字符串或* C.Char
- cgo
- net
- c#
- 1个回答
- PHP在字符串中检测和拆分html特殊字符代码?
- hex
- unicode
- utf-8
- php
- 4个回答