热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NSNonLossyASCIIStringEncoding返回nil

如何解决《NSNonLossyASCIIStringEncoding返回nil》经验,为你挑选了1个好方法。



1> manishg..:

问题是由于您用于编码和解码的编码不同.

 testString=":;Hello \ud83d\ude09\ud83d\ude00 ., <> /?\";
 NSData *data = [testString dataUsingEncoding:NSUTF8StringEncoding];

在这里,您已使用UTF8编码将字符串转换为数据.这意味着它将根据所使用的unicode字符转换1-4个字节的unicode字符.例如\ ude09将转换为ED B8 89. 维基可以获得相同的解释.基本上是使用以下技术:

在此输入图像描述

现在,如果您尝试使用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]; 


推荐阅读
author-avatar
bentablo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有