我正在尝试获取可能包含特殊字符和表情符号的UITextField的内容,并将其转换为我可以在GET请求中传递给PHP服务的内容。
如果我根本不对字符串进行编码,那么emojis就会很好地显示(我可以在数据库中看到它们并且它们会正确地回复给我)...但是如果我添加了特殊的字符(〜!@#$ %等,GET请求扼流圈。
所以我通过url编码器运行字符串:
[commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding];
我正在使用NSNonLossyASCIIStringEncoding来正确地运行emojis,这有效,但使用它来编码会返回一个nil字符串。事实上,唯一没有返回nil的编码是UTF8,但是使用percent-escapes来扩展表情符号unicode。
我该怎么做?我是否必须为此案例编写自己的字符串替换,或者是否有iOS方法来执行此操作而我没有看到?
干杯,
克里斯
答案 0 :(得分:6)
使用它来逃避表情符号:
NSString *escapedEmoji = [NSString stringWithCString:[emojiString cStringUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding];
这对于unescape表情符号:
NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];
答案 1 :(得分:5)
NSNonLossyASCIIStringEncoding
到stringByAddingPercentEscapesUsingEncoding:
会返回nil
,因为您传入的字符串不是ASCII。使用NSUTF8StringEncoding
%转义表情符号字符,这就是我期望的结果。如果您的服务器端中间件没有自动从查询字符串中取消表情符号,那么您应该在服务器端代码中执行此操作,如果它导致上游问题。
答案 2 :(得分:2)
您可以使用以下代码对表情符号字符串进行编码
NSString *uniText = [NSString stringWithUTF8String:[youremojistring UTF8String]];
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];