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