【问题标题】:Convert data with escaped unicode characters to string将带有转义的 unicode 字符的数据转换为字符串
【发布时间】:2023-03-31 16:47:01
【问题描述】:

我从 web api 收到带有转义 unicode 字符的字符串,例如:Pla\u010daj Izbri\u0161i

public func decode(data: Data) throws -> String {
    guard let text = String(data: data, encoding: .utf8) else {
        throw SomeError()
    }

    // text = Pla\u010daj Izbri\u0161i
}

将其转换为正常可显示的 unicode 字符串的最佳方法是什么?

【问题讨论】:

  • 这是 JSON 响应的一部分吗?在这种情况下,JSONDecoder 应该自动处理它。
  • 不,它不是 JSON 响应的一部分

标签: swift


【解决方案1】:

假设您的 data 具有与以下内容相同的内容:

let data = #"Pla\u010daj Izbri\u0161i"#.data(using: .utf8)!
print(data as NSData) //->{length = 24, bytes = 0x506c615c7530313064616a20497a6272695c753031363169}

你可以这样解码:

    public func decode(data: Data) throws -> String {
        guard let text = String(data: data, encoding: .utf8) else {
            throw SomeError()
        }

        let transform = StringTransform(rawValue: "Any-Hex/Java")
        return text.applyingTransform(transform, reverse: true) ?? text
    }

但是,如果你真的从 web api 中得到这种数据,你最好告诉 api 工程师使用一些正常的编码方案。

【讨论】:

  • \uNNNN 是典型的 JSON 转义序列,所以我想知道该数据是否实际上是某些 JSON 响应的一部分。
  • @MartinR,是的,这是一种可能性。不过,还不确定。所以,我澄清了这个答案是基于一个假设。
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多