【发布时间】:2020-11-17 14:27:54
【问题描述】:
我面临以下问题:
在我的应用中,用户也可以在文本字段中输入特殊字符(如表情符号)。因此,在将输入的文本发送到请求正文中的服务器时,我正在使用以下代码对其进行转换:
func emojiToUTF8()->String
{
let data = self.data(using: .nonLossyASCII, allowLossyConversion: true)
let emoji = String.init(data: data!, encoding: .utf8)
return emoji ?? self
}
例如,如果我输入文本"☺️",它会使用上述方法转换为"\u263a\ufe0f"。到这里为止一切都很好。
当我将它添加到字典中以将其作为请求参数发送到服务器时,就会出现问题。我正在使用的代码:
var parameters = [String:String]()
parameters["feedback"] = feedBackTxt
print("Parameters:",parameters) /// output: ["feedback": "\\u263a\\ufe0f"]
因此,这里的问题是由于字符转义,在每个斜杠之前都会附加一个额外的斜杠。我也检查了创建的字典值。它也在那里显示双斜线。我该如何避免这种情况?当我只是用字符串创建字典时,为什么会发生这种情况?这导致服务器端出现问题。
我尝试了几件事,但似乎都没有工作。
【问题讨论】:
-
这不是错误,而是一项功能。第二个反斜杠是虚拟的,需要在字符串文字中转义单个反斜杠。
-
这只是
print工作原理的产物。 -
我们也在服务器端进行了调试。他们收到的请求有双斜线。
-
在服务器上调试怎么样?这是 one 反斜杠的证据:
print(Data("\\u263a\\ufe0f".utf8) as NSData)。你在开头看到多少个5cs——反斜杠的十六进制值?