编辑:我能够将问题归结为一个更加集中的领域。尽管这里的帖子不一定是假设错误的,但是Swift 4 base64 String to Data not working due to special character更为清晰,并有一个Playground示例。
我有一个必须在Swift 4中序列化为Dictionary的字符串。该应用程序允许用户上传数据(JSON序列化为Data)并在以后下载。对于后者,该应用程序对下载的数据(dlData)执行以下操作
if let rootDict = NSKeyedUnarchiver.unarchiveObject(with: dlData) as? Dictionary<String, Any> {
if let content = rootDict["C"] as? String {
if let data = content.data(using: .utf8, allowLossyConversion: true){
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
...
} else {
print("DATA DIDNT WORK") //gets printed with his data
}
几乎每次都运行良好,但是最近有用户联系我,他的iPhone上没有任何数据显示。我添加了else
路径,这就是它的去向。似乎无法将此特定字符串转换为Data
当我 我认为问题可能出在Xcode控制台“清理”其中可能包含的字符串和“不良”字符,这就是为什么复制粘贴使其起作用但直接下载却不起作用的原因。我可以在 这不是执行此任务的最佳方法,但我无权更改此系统的基础结构。而且由于它确实适用于至少95%的用户,因此我认为它应该适用于所有用户。 我尝试做 我遇到过这个博客https://natrajbontha.wordpress.com/2017/10/12/replacement-character-in-json-data/,但实际上我更喜欢仅在转换已经失败一次的情况下进行清理。 此位置的原始字符是美国国旗表情符号,我的用户可以在没有最新表情符号的情况下生活,但总的来说,我希望显示表情符号,因此替换所有这些表情符号是不可行的。 我刚刚在Playground中尝试了相同的操作,结果也一样。print()
字符串时,复制控制台输出,然后将其硬编码到方法中,就可以了。该字符串是有效的JSON(使用3个不同的在线验证器进行了验证),并且JSONSerialization也可以使用。 / p>
print()
字符串中看到的唯一奇怪的东西是replacement character(符号。)。print()
dlData > rootDict > content > data > json
Data > Dictionary > string > Data > Dictionary
,但这不会影响字符串,可能是因为在实际的字符串中,它不是“?”,而是其他内容,而“?”仅会显示,因为控制台不会不知道该怎么放。replacingOccurrences(of: "�", with: "?")