application/json 响应中的 NSJSONSerialization、NSURLSession、Unicode
NSJSONSerialization, NSURLSession, Unicode in application/json responses
我正在使用 NSURLSession 与 Web 服务器通信,并使用 NSJSONSerialization 来解码 JSON。我在解释表情符号字符时遇到问题。
例如,我有一个 JSON 文件位于:https://www.virtualsanity.com/unicode.json
文件内容为:
{"\uf4a9": "\uf4a9"}
字典中的键值是"\uf4a9"。我相信这是一个正确转义的角色。
我在 iOS 9:
上有这个 Swift 代码 运行
let urlSession = NSURLSession.sharedSession()
let url = NSURL(string: "https://www.virtualsanity.com/unicode.json")!
let request = NSMutableURLRequest(URL: url)
let dataTask = urlSession.dataTaskWithRequest(request) { (data, urlResponse, error) in
print("encoding: ", urlResponse?.textEncodingName)
if let responseData = data {
if let json = try? NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions()) {
if let dictionary = json as? [String: String] {
for (key, value) in dictionary {
print("key: \(key), value: \(value)")
}
}
} else {
print("Unable to deserialize json")
}
} else {
print("No response data")
}
}
dataTask.resume()
我希望生成的字典的键和值都是一个字符。相反,它们是垃圾字符。
我希望有人能帮助我理解我做错了什么。
实际上 unicode 是 \u1F4A9
,在操场上试试这个:
print("\u{1f4a9}")
print("\u{f4a9}")
我正在使用 NSURLSession 与 Web 服务器通信,并使用 NSJSONSerialization 来解码 JSON。我在解释表情符号字符时遇到问题。
例如,我有一个 JSON 文件位于:https://www.virtualsanity.com/unicode.json
文件内容为:
{"\uf4a9": "\uf4a9"}
字典中的键值是"\uf4a9"。我相信这是一个正确转义的角色。
我在 iOS 9:
上有这个 Swift 代码 运行let urlSession = NSURLSession.sharedSession()
let url = NSURL(string: "https://www.virtualsanity.com/unicode.json")!
let request = NSMutableURLRequest(URL: url)
let dataTask = urlSession.dataTaskWithRequest(request) { (data, urlResponse, error) in
print("encoding: ", urlResponse?.textEncodingName)
if let responseData = data {
if let json = try? NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions()) {
if let dictionary = json as? [String: String] {
for (key, value) in dictionary {
print("key: \(key), value: \(value)")
}
}
} else {
print("Unable to deserialize json")
}
} else {
print("No response data")
}
}
dataTask.resume()
我希望生成的字典的键和值都是一个字符。相反,它们是垃圾字符。
我希望有人能帮助我理解我做错了什么。
实际上 unicode 是 \u1F4A9
,在操场上试试这个:
print("\u{1f4a9}")
print("\u{f4a9}")