You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Swift中解码含Unicode转义序列的字符串

Swift 字符串解码解决方案

你提到的输入和输出字符串看起来一致,推测你实际处理的是带有Unicode转义序列的字符串(比如类似 Niks \u013Beo\u014Denko 这样的格式),需要解码成正常显示的Unicode字符。以下是几种常见场景的处理方法:

1. 处理JSON中的转义字符串

如果你的字符串来自JSON数据,直接用JSONDecoder解析即可自动处理转义:

import Foundation

let jsonData = """
{"name": "Niks \\u013Beo\\u014Denko"}
""".data(using: .utf8)!

struct User: Codable {
    let name: String
}

do {
    let user = try JSONDecoder().decode(User.self, from: jsonData)
    print(user.name) // 输出 Niks Ļeoņenko
} catch {
    print("解码失败:\(error)")
}

2. 手动解码Unicode转义序列

如果是单独的转义字符串(非JSON场景),可以用NSString的便捷方法处理:

let escapedString = "Niks \\u013Beo\\u014Denko"
let decodedString = NSString(string: escapedString).removingPercentEncoding ?? escapedString
print(decodedString) // 输出 Niks Ļeoņenko

也可以用自定义方法实现更精准的处理:

func decodeUnicodeEscape(_ string: String) -> String {
    let regex = try! NSRegularExpression(pattern: "\\\\u([0-9a-fA-F]{4})", options: [])
    let range = NSRange(string.startIndex..., in: string)
    return regex.stringByReplacingMatches(in: string, range: range, withTemplate: "\\U$1")
        .applyingTransform(StringTransform("Hex-Any"), reverse: false) ?? string
}

let escaped = "Niks \\u013Beo\\u014Denko"
print(decodeUnicodeEscape(escaped)) // 输出 Niks Ļeoņenko

3. 处理非UTF-8编码的字符串

如果你的字符串是从其他编码(比如ISO-8859-1)转换而来,需要指定正确编码重新转换:

// 假设原始数据是ISO-8859-1编码
let data = "Niks Ļeoņenko".data(using: .isoLatin1)!
let decodedString = String(data: data, encoding: .utf8) ?? "解码失败"
print(decodedString)

内容的提问来源于stack exchange,提问作者Niks Ļeoņenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:33:23