作者:bentablo | 来源:互联网 | 2023-02-13 09:07
1> manishg..:
问题是由于您用于编码和解码的编码不同.
testString=":;Hello \ud83d\ude09\ud83d\ude00 ., <> /?\";
NSData *data = [testString dataUsingEncoding:NSUTF8StringEncoding];
在这里,您已使用UTF8编码将字符串转换为数据.这意味着它将根据所使用的unicode字符转换1-4个字节的unicode字符.例如\ ude09将转换为ED B8 89. 维基可以获得相同的解释.基本上是使用以下技术:
![在此输入图像描述](https://img.php1.cn/3cd4a/1eebe/cd5/e3aa5425383ba10d.png)
现在,如果您尝试使用ascii编码将此解码为字符串,如下所示
NSString *strBody = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
上述情况必定会失败,因为它无法将ED B8 89或类似的unicode数据解码为ascii字符串.这就是它返回错误的原因.
如果数据是ascii编码的,那么它将使用文字ascii hex进行转换.所以\ ude09会成为"5c 75 64 65 30 39"
所以正确的转换将是:
testString=":;Hello \ud83d\ude09\ud83d\ude00 ., <> /?\";
NSData *data = [testString dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *strBody = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];
你的问题是为什么你希望它编码为UTF8并解码为ASCII?
对于表情符号,请尝试下面的内容
testString=":;Hello \\ud83d\\ude09\\ud83d\\ude00 ., <> /?";
NSData *data = [testString dataUsingEncoding:NSUTF8StringEncoding];
NSString *strBody = [[NSString alloc] initWithData:data encoding:NSNonLossyASCIIStringEncoding];