如何在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
相关产品推荐
相关产品推荐

