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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:45:03