我在解析JSON时收到此错误:
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unable to convert data to string around character 73053.) UserInfo=0x1d5d8250 {NSDebugDescription=Unable to convert data to string around character 73053.}
有任何建议如何解决这个问题?
ADDED 正如错误报告中所述,解析器无法通过位置73053处的字符,即我的JSON响应中的“ø”。据我所知,像Ø,Å,Æ等字符不应该成为json解析器的问题吗?
答案 0 :(得分:19)
是的,编码问题我遇到了同样的问题并得到了上述错误。我从服务器获得了NSData <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>C:\Developments\gsvc\Website</publishUrl>
<DeleteExistingFiles>False</DeleteExistingFiles>
</PropertyGroup>
</Project>
。所以我必须在使用NSJSONSerialization解析之前将其转换为UTF8。
encoding:NSISOLatin1StringEncoding
答案 1 :(得分:7)
Switf 3
let responseStrInISOLatin = String(data: data, encoding: String.Encoding.isoLatin1)
guard let modifiedDataInUTF8Format = responseStrInISOLatin?.data(using: String.Encoding.utf8) else {
print("could not convert data to UTF-8 format")
return
}
do {
let responseJSONDict = try JSONSerialization.jsonObject(with: modifiedDataInUTF8Format)
} catch {
print(error)
}
答案 2 :(得分:6)
检查您正在解析的数据是否实际上是有效的JSON(而不仅仅是'几乎'JSON)。当您有不同的数据格式无法解析为JSON时,就会发生该错误。例如见:
iOS 5 JSON Parsing Results in Cocoa Error 3840
您的JSON中是否还有顶级容器?数组或字典。例如:
{ "response" : "Success" }
<强>更新强>
JSON的默认编码是UTF-8。特殊/异国情调的字符不是UTF-8的问题,但请确保您的服务器正确地将其内容正确编码为UTF-8。另外,你有没有告诉过你的JSON解释器使用不同的编码?
如果您的JSON来自网络服务,请将网址放入此页面以查看有关编码的内容:
答案 3 :(得分:0)
快捷键5:
是的,我在解析JSON数据时遇到了相同的错误。
解决方案:您必须先将响应数据转换为String,然后在解码之前使用UTF8编码将该Sting转换为Data。
let utf8Data = String(decoding: responseData, as: UTF8.self).data(using: .utf8)