在Swift中如何解析Firebase Realtime Database返回的Unicode字符串
问题原因
Firebase Realtime Database 本身存储的是UTF-8编码的字符,你拿到的\U3141这类Unicode转义序列,本质是获取到的字符串被额外做了JSON转义处理,没有被SDK自动解析还原。Android Kotlin版的Firebase SDK默认会自动处理这类转义,所以不会出现该问题。
通用解决思路
将拿到的转义字符串按照JSON字符串规则做一次解析即可还原原始韩文:
- 首先清理字符串首尾多余的引号、空白符和转义前缀
- 用对应语言的JSON解析工具解析处理后的字符串,直接得到原始UTF-8字符
各端实现示例
Swift(iOS端,对应你输出的Optional格式场景)
func decodeUnicodeEscaped(_ escaped: String) -> String? { // 清理多余转义符和引号,统一大写U转小写u符合JSON标准 let processed = escaped .trimmingCharacters(in: .whitespacesAndNewlines) .replacingOccurrences(of: #"\""#, with: "") .replacingOccurrences(of: #"\\U"#, with: #"\\u"#) guard let data = "\"\(processed)\"".data(using: .utf8) else { return nil } do { return try JSONSerialization.jsonObject(with: data) as? String } catch { return nil } } // 调用示例 let rawValue = "\"\\U3141\"" if let result = decodeUnicodeEscaped(rawValue) { print(result) // 输出 ㅁ }
JavaScript(Web端)
function decodeUnicodeEscaped(escapedStr) { const processed = escapedStr.replace(/"/g, '').replace(/\\U/g, '\\u') return JSON.parse(`"${processed}"`) } // 调用示例 console.log(decodeUnicodeEscaped("\\u3131")) // 输出 ㅁ
额外排查建议
你可以先检查下写入数据到Firebase的逻辑,确认写入时没有手动对韩文做转义处理,从源头避免该问题。
内容的提问来源于stack exchange,提问作者liveAnyway
相关产品推荐
相关产品推荐

