【发布时间】:2023-03-04 17:03:01
【问题描述】:
我正在尝试获取可能包含特殊字符和表情符号的 UITextField 的内容,并将其转换为可以在 GET 请求中传递给 PHP 服务的内容。
如果我根本不对字符串进行编码,表情符号会显示得很好(我可以在数据库中看到它们并且它们会正确地返回给我)......但是如果我添加特殊字符(~!@#$ % 等)GET 请求阻塞。
所以我通过 url 编码器运行字符串:
[commentText stringByAddingPercentEscapesUsingEncoding:NSNonLossyASCIIStringEncoding];
我正在使用 NSNonLossyASCIIStringEncoding 来正确获取表情符号,这很有效,但是使用它进行编码会返回一个 nil 字符串。事实上,唯一不返回 nil 的编码是 UTF8,但它会使用百分比转义符组合 emoji unicode。
我该怎么做?我是否必须为这种情况编写自己的字符串替换,或者是否有一种我没有看到的 iOS 方法?
干杯,
克里斯
【问题讨论】:
-
NSNonLossyASCIIStringEncoding显然 不起作用 如果它返回 nil。至于NSUTF8StringEncoding,“...用百分比转义符来处理 emoji unicode。”这正是百分比转义符的作用。你期望发生什么? -
我需要一些东西来保持完整的 unicode 位完整,同时逃避会阻止 GET 请求通过的东西。 UTF8 在表情符号的 unicode 中获取和转义字符,使其无法使用。对于这三个表情符号 (????????????) UTF8 编码将它们变成 (%F0%9F%98%84%F0%9F%98%98%F0%9F%98%B3)。
-
使用 NonLossyASCII 编码使它们保持完整。
-
除非它不能保持它们完好无损,因为将
NSNonLossyASCIIStringEncoding传递给stringByAddingPercentEscapesUsingEncoding:返回 nil,如您所说。那是因为字符串不是 ASCII。 -
好的...那么解决方案是什么?让表情符号通过中间件成功传输到数据库的唯一方法是根本不对其进行编码。但这仅在传递的字符串不包含任何特殊字符时才有效。似乎随着 iOS 7 对表情符号采用 Unicode 6 规范,没有框架函数可以同时处理扩展字符和 url 编码。我基本上是在问是否真的有一个,我只是没有找到它,或者我是否需要自己推出(我最终这样做只是为了继续前进)。
标签: ios objective-c encoding nsstring urlencode