所以,
一个看似简单的问题把我难倒了。我有两个声明:
NSLog(@"%@", @"\U0001f1ee\U0001f1f9");
NSLog(@"%@", @"\\U0001f1ee\\U0001f1f9");
第一个输出正确的表情符号(标志)。第二个输出转义字符串。我需要对第二个字符串做什么转换才能让它也输出标志?
换句话说:我有一些转义的Unicode字符串,我想打印出来作为正确的表情符号。我该怎么做呢?
我试着转换到NSUTF8StringEncoding
NSData,然后再转换回NSString,我试着使用NSNonLossyASCIIStringEncoding
,没有乐趣。我一定是用错了
感谢您的任何帮助!
2条答案
按热度按时间cvxl0en21#
简单。使用-stringByRemovingPercentEncoding。
8xiog9wr2#
这比我想象的要花更长的时间。
我的最后一种方法是将Unicode转义序列转换为它们的UTF8等效字节,将它们编码为百分比转义序列,然后使用
[NSString stringByRemovingPercentEncoding]
生成实际的Unicode字符。您必须手动执行位移位以完成转换,但在此之后其余的都是微不足道的。作为参考,您可以查看this example gist,它在从较大字符串中的给定ASCII等效字符解析该值后,使用Unicode等宽字符的十进制代码点等效值进行转换。这个逻辑是用JXA-ObjectiveC编写的,但是可以完美地移植到Objective-C中。
更新:
下面是原生Objective-C实现的样子: