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

Swift中批量转换MySQL来源的变音字符乱码(如Neusäß转Neusäß)

解决Swift中Latin-1转UTF-8乱码的简便方法

这问题我之前也踩过坑!本质是字符编码的双重转换错误——第三方旧应用把UTF-8编码的字符串错误当成Latin-1(ISO-8859-1)写入了MySQL,读出来自然就变成了Neusäß这类乱码。不用逐个替换,直接利用Swift的编码转换就能一次性搞定所有这类问题。

原理说明

举个例子:正确字符ß的UTF-8编码是0xC3 0x9F,当被错误用Latin-1解码时,0xC3对应Ã,0x9F对应Ÿ,于是就出现了ß的乱码。反过来操作就能还原:把乱码字符串先转成Latin-1格式的Data,再用UTF-8解码这个Data,就能得到原本的正确字符串。

Swift实现代码

给String写个扩展,方便全局调用:

extension String {
    func fixLatin1UTF8Mismatch() -> String? {
        // 将乱码字符串转换为Latin-1编码的Data
        guard let latin1Data = self.data(using: .isoLatin1) else {
            return nil
        }
        // 用UTF-8解码Data,得到正确字符串
        return String(data: latin1Data, encoding: .utf8)
    }
}

使用示例

直接调用扩展方法即可:

let messedUpText = "Neusäß"
if let fixedText = messedUpText.fixLatin1UTF8Mismatch() {
    print(fixedText) // 输出: Neusäß
}

这个方法能一次性处理所有常见的变音字符乱码,比如ö转ö、ü转ü、ä转ä都能完美解决,比逐个写替换逻辑高效太多。如果遇到极个别特殊字符没处理好,可能是旧应用还有其他编码异常,但绝大多数这类场景下这个方法都能胜任。

内容的提问来源于stack exchange,提问作者Michael Baumgärtner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:58:50