错误域=NSCocoaErrorDomain代码=3840“未转义的控制字符
字符 981 左右。” UserInfo={NSDebugDescription=未转义的控制
字符 981 周围的字符。}
我在响应请求时收到上述错误。
以下是代码行:
Alamofire.request(.POST, urlStr, parameters: parameter, encoding: .JSON, headers: nil).validate().responseJSON {
response in switch response.result {
case .Success(let JSON):
completionHandler(JSON as! NSDictionary)
case.Failure(let Error):
print(Error)
}
}
它在 Postman 中给出 JSON 响应。
我在邮递员中得到的回复:
{
"orderdetails": {
"status_code": "200",
"status_message": "Order details",
"billingandshipping": {
"billing": {
"firstname": "first",
"lastname": "last",
"email": "[email protected]",
"address": "dasdesfrew",
"city": "Rajkot",
"area": "University Road",
"pincode": "360003",
"phone": "1234567890",
"mobileno": "1234567891"
},
"shipping": {
"firstname": "first",
"lastname": "last",
"email": "[email protected]",
"address": "dasdesfrew",
"city": "dasdesfrew",
"area": "dcdc",
"pincode": "360003",
"phone": "1234567890",
"mobileno": "1234567891"
}
},
"orders": [
{
"order_id": "77",
"order_date": "09-08-2016 13:05:29",
"delivery_date": "10-08-2016",
"order_items": [
{
"Sr": "1",
"product_name": "Lemon",
"gujtitle": "લીંબુ ",
"product_code": "000057",
"product_price": "108.00",
"product_qty": "2",
"unit": "1 kg.",
"product_total": "216"
}
],
"final_total": "216.00",
"shipping_cost": "0.00",
"order_total": "216.00",
"discount_type": "null",
"discount_amount": "null",
"coupon_name": "null",
"comment": "gdhdj\nfghd.g\nghj\n\n\n\n\n\n\n\n\n\n.."
}
]
}
}
据您所知,存在与“ ”.
所以我建议您可以添加“”,这对您有用,如下所示:
” ”=>“\n”
因为这是一个特殊字符,称为退格字符。
自 Swift 5 起,您无需手动将另一个
\
添加到 JSON 字符串中有效的 \n
中,只需使用以下语法将其声明为原始字符串文字:
let jsonString = #"{"comment": "gdhdj\nfghd.g\nghj\n\n\n\n\n\n\n\n\n\n.."}"#
多行也可以工作:
let jsonString = #"""
{
"comment": "gdhdj\nfghd.g\nghj\n\n\n\n\n\n\n\n\n\n.."
}
"""#
请注意,使用
#
进行包装至关重要 - 虽然多行示例在没有它的情况下也可以 compile 正常,但在 runtime 中,它会在下面的 JSONSerialization 示例中抛出错误:
do {
guard let data = jsonString.data(using: .utf8) else { throw SomeError() }
let obj = try JSONSerialization.jsonObject(with: data)
print("valid!")
} catch {
print(error)
}
NSLog 你收到的 NSData 并看看你在字节 981 附近发现了什么。未转义的控制字符的问题是它们是不可见的,所以你不能在 NSString 中看到它们,但你会在 NSData 中看到它们。
如果您的数据长度为 981 字节或非常接近,那么您的代码有可能处理不完整的 JSON 数据,这几乎总是会失败;这是you需要解决的问题。如果某些项目之间(例如两个数组元素之间)存在控制字符,那么这可能是服务器代码中的错误。
我花了一些时间才弄清楚 49546 是什么。 如果您的问题是 字符 49546 周围未转义的控制字符,请将
\t
替换为 \\\t
。
可以肯定的是(当人们进行错误的复制/粘贴时......),我构建我的对象是安全的:
...
private final func fillWith(
id: Int,
name: String?
) {
self.id = id
self.productName = name?.replacingOccurrences(of: "\t", with: "")
self.productName = self.productName?.replacingOccurrences(of: "\n", with: "")
所以发送up时没有问题。