NSString与emoticons / emojis url编码

时间:2013-10-10 19:26:01

标签: ios objective-c encoding nsstring urlencode

我正在尝试获取可能包含特殊字符和表情符号的UITextField的内容,并将其转换为我可以在GET请求中传递给PHP服务的内容。

如果我根本不对字符串进行编码,那么emojis就会很好地显示(我可以在数据库中看到它们并且它们会正确地回复给我)...但是如果我添加了特殊的字符(〜!@#$ %等,GET请求扼流圈。

所以我通过url编码器运行字符串:

[commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding];

我正在使用NSNonLossyASCIIStringEncoding来正确地运行emojis,这有效,但使用它来编码会返回一个nil字符串。事实上,唯一没有返回nil的编码是UTF8,但是使用percent-escapes来扩展表情符号unicode。

我该怎么做?我是否必须为此案例编写自己的字符串替换,或者是否有iOS方法来执行此操作而我没有看到?

干杯,

克里斯

3 个答案:

答案 0 :(得分:6)

使用它来逃避表情符号:

NSString *escapedEmoji = [NSString stringWithCString:[emojiString cStringUsingEncoding:NSNonLossyASCIIStringEncoding] encoding:NSUTF8StringEncoding];

这对于unescape表情符号:

NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];

答案 1 :(得分:5)

NSNonLossyASCIIStringEncodingstringByAddingPercentEscapesUsingEncoding:会返回nil,因为您传入的字符串不是ASCII。使用NSUTF8StringEncoding%转义表情符号字符,这就是我期望的结果。如果您的服务器端中间件没有自动从查询字符串中取消表情符号,那么您应该在服务器端代码中执行此操作,如果它导致上游问题。

答案 2 :(得分:2)

您可以使用以下代码对表情符号字符串进行编码

NSString *uniText = [NSString stringWithUTF8String:[youremojistring UTF8String]];
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];
相关问题