【问题标题】:Can not convert umlauts (Ü Ö Ä ü ö ä è é) to .utf8无法将变音符号 (Ü Ö Ä ü ö ä è é) 转换为 .utf8
【发布时间】:2020-11-10 19:41:06
【问题描述】:

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

String(data: data, encoding: .utf8) 当数据包含德语变音符号时返回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
}

我该如何处理?

【问题讨论】:

  • 这意味着 HTTP 响应不是 UTF-8 编码的,而是使用了一些不同的编码。
  • 您的data 可能在Win-1252 中。
  • 试试encoding: .windowsCP1252
  • 您需要用一些样本数据edit您的问题,否则没有人能给您一个明确的答案。如果您对这些字符进行 UTF-8 编码,它们就可以很好地解码。问题很可能是您的数据不是 UTF-8 编码的,但如果不查看您的实际数据就无法判断。
  • 你也可以尝试检测来自HTTP响应的编码,比较stackoverflow.com/a/32051684/1187415

标签: swift encoding utf-8 diacritics


【解决方案1】:

你的方法完全错误。

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

有两种可能:一种是您知道数据的编码并传递正确的一种。另一个是如果你不知道编码,你使用一个不同的函数,你不需要指定编码;相反,操作系统将查看解码并确定最有可能正确的编码。只有当它不是任何 iOS 可以理解的编码时,结果才会为 nil。

【讨论】:

  • 一个 Swift String 确实有一个编码:UTF-8。它不是只是Character 的序列,尽管您可以与它进行交互。它不像 C 字符串。任何转换为​​其他编码或从其他编码转换的 API 的使用都是从基本 UTF-8 表示进行的。
【解决方案2】:

encoding: .windowsCP1252 帮助了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 2012-08-14
    • 2020-07-07
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多