无法将变音符号 (Ü Ö Ä ü ö ä è é) 转换为 .utf8

Can not convert umlauts (Ü Ö Ä ü ö ä è é) to .utf8

我想解码来自 http 请求的响应。但是在编码为 .utf8

时出错

String(data: data, encoding: .utf8) returns nil 当数据包含来自德语的变音符号时 (Ü Ö Ä ü ö ä è é)

如何正确解码 Data? 对象?

编辑: 提供更多详细信息

我的回复是这样的。我无法更改它来自与此类似的后端。

let string = """
            {
            "test":"Value",
            "OperatingInfosQuotes":"\n<div id=\"div_operatinginfo_inner\">\n<div id=\"div_operatinginfo_title\"><b>Test</b></div>\n<div id=\"div_operatinginfo_content\">\n\n Ü Ö Ä ü ö ä è é\n\n</div>\n</div>\n"
            }
            """
    
do {
  let encode = try JSONDecoder().decode(TestObject.self, from: Data(string.utf8))
  print(encode)
} catch {
  print("Count not decode")
}

我的可编码对象:

struct TestObject: Codable {
    var test: String
}

我该如何处理?

你的做法完全错误。

一个Swift字符串没有编码,它只是一个字符序列。您的数据包含字节,这些字节是以某种编码存储的字符。您声称编码是 UTF8,这显然是错误的。

有两种可能:一种是您知道数据的编码并传递正确的编码。另一个是,如果您不知道编码,则在不需要指定编码的地方使用不同的函数;相反,OS 将查看解码并决定最有可能是正确的编码。只有 不是 iOS 理解的任何编码,结果才会为零。

encoding: .windowsCP1252 有帮助。

问题是 Json 包含引号 (""),它破坏了 Swift 中 Json 的格式,也无法转换为 .utf8 .

如果从响应中删除引号,一切都会好起来的,否则解决方法是转换为 .windowsCP1252 字符串。