【问题标题】:Convert unicode symbols \uXXXX in String to Character in Swift将字符串中的 unicode 符号 \uXXXX 转换为 Swift 中的字符
【发布时间】:2016-04-08 17:42:16
【问题描述】:

我通过 REST API 接收到一个字符串,其中包含\uXXXX 形式的 unicode 编码字符

例如Ain\u2019t 应该是 Ain’t

有没有很好的方法来转换这些?

【问题讨论】:

    标签: swift unicode-string


    【解决方案1】:

    你可以使用\u{my_unicode}:

    print("Ain\u{2019}t this a beautiful day")
    /* Prints "Ain’t this a beautiful day"
    

    来自Language Guide - Strings and Characters - Unicode

    字符串字面量可以包含以下特殊字符:

    ...

    • 任意 Unicode 标量,写为 \u{n},其中 n 是 1–8 位 十六进制数,其值等于有效的 Unicode 代码点

    【讨论】:

    • 我以前见过这个,问题是,我不知道返回的字符串中包含哪些字符。
    • @Dimitri 正如 Leo 所说,我知道你有例如UTF-8 十六进制,只需解析 \u 后面的 4 个字符并替换为上面给出的答案。
    • @LeoDabus API 正在为我提供字符串。我会尝试解析它。这听起来是最成功的方法:)thanx
    • @Dimitri 例如let a = "Ain\u2019t this a beautiful day" 不会编译,所以我想知道 API 对无效的特殊字符 \u... 做了什么?
    • @Dimitri:我明白了,那你应该看看NSJSONSerialization 类,它应该包含处理带有转义后缀\u(优先的unicode字符的现有方法将其分配给 swift 本机 String 对象)。参见例如stackoverflow.com/questions/24318171/…stackoverflow.com/questions/29004561/…
    【解决方案2】:

    您可以应用字符串转换StringTransform

    extension String {
        var decodingUnicodeCharacters: String { applyingTransform(.init("Hex-Any"), reverse: false) ?? "" }
    }
    

    let string = #"Ain\u2019t"#
    print(string.decodingUnicodeCharacters)  // "Ain’t\n"
    

    【讨论】:

    • 处理不受控制的字符串时的最佳答案。
    • 在我的情况下,问题:API 响应是 Ain\U200bt ,当您尝试从 API 将局部变量存储为 MyString 时,如果使用 label.text = MyString -->> Aint 正在显示,但是,如果我们使用 attributes.text -->> Ain t 正在显示(额外空间)。
    • @McDonal_11 \U200b\u200b 不同
    • 是的,但是将Occurrences(of: "\u{200B}", 替换为:""),这是有效的。,我不知道这背后的概念。,
    • @LeoDabus 解码Unicode字符不可用,还有其他选择吗?
    猜你喜欢
    • 2013-01-30
    • 2016-10-22
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多