1

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

如果我根本不对字符串进行编码,表情符号就会很好地显示出来(我可以在数据库中看到它们并且它们会正确地返回给我)......但是如果我添加特殊字符(~!@#$% 等.) GET 请求阻塞。

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

[commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding];

我正在使用 NSNonLossyASCIIStringEncoding 来正确获取表情符号,这可以正常工作,但是使用它进行编码会返回一个 nil 字符串。事实上,唯一不返回 nil 的编码是 UTF8,但它会使用百分比转义符来处理 emoji unicode。

我该怎么做呢?我是否必须为这种情况编写自己的字符串替换,或者是否有一种我没有看到的 iOS 方法来做到这一点?

干杯,

克里斯

4

3 回答 3

6

使用它来逃避表情符号:

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

这是为了避免表情符号:

NSString *unescapedEmoji = [NSString stringWithCString:[escapedString cStringUsingEncoding:NSUTF8StringEncoding] encoding:NSNonLossyASCIIStringEncoding];
于 2015-02-22T21:38:55.493 回答
5

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

于 2013-10-10T22:20:34.733 回答
2

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

NSString *uniText = [NSString stringWithUTF8String:[youremojistring UTF8String]];
NSData *msgData = [uniText dataUsingEncoding:NSNonLossyASCIIStringEncoding];
NSString *goodMsg = [[NSString alloc] initWithData:msgData encoding:NSUTF8StringEncoding];
于 2013-11-11T11:23:02.410 回答