这是我的问题:我目前正在开发一个应用程序,包括即时聊天(使用 FCM)。
一切正常,除了当我尝试发送“é”或表情符号等特殊字符时。
收到的推送通知包含好的字符串,但是当讨论保存在服务器上然后重新加载时,我无法读取它们并获取 UTF8 文本,例如“ê”的“u00ea”。
我对编码等不太了解,但如果你们能提供帮助,我会很高兴!
这是我用来发送消息的代码:
func sendMessage(_ completion: @escaping (_ response: String) -> ()) {
DispatchQueue.global(qos: .userInitiated).async { () -> Void in
let urlString = //Server adress
let url = URL(string: urlString)
var request = URLRequest(url: url!)
let set = CharacterSet()
request.httpMethod = "POST"
let postString = "Message=" + /*String text to send*/
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
})
task.resume()
}
}
多谢 !
PS:我是刚开始向 stackoverflow 提问,所以请毫不犹豫地询问更多详细信息
按照罗布的要求进行编辑:
我发送了消息“testéè”。
另一部手机通过推送通知收到“test é è”。
当一部电话从存储了服务器答案的服务器加载讨论时。
[{"content":"test u00e9 u00e8","sender":"103","timestamp":"1475491191"}]
另外,我没有对服务器进行编码,但那个人也在制作一个 Android 应用程序,它可以很好地处理特殊字符。
Edit #2: 我也尝试这个代码
var request = URLRequest(url: url!)
let set = CharacterSet()
request.httpMethod = "POST"
let postString = "Message=" + self.message.addingPercentEncoding(withAllowedCharacters: set)!
let bytesArray = UTF8Encoding.decode(postString)
request.httpBody = Data(bytes: UnsafePointer<UInt8>(bytesArray), count: bytesArray.count)
这没有任何区别。
非常感谢你们的帮助。