Swift中如何解码UTF-8编码乱码字符串得到正常可读文本
实现结论
该需求可以直接实现。你遇到的乱码是典型的编码错位问题:原本按UTF-8规则编码的字节流,被错误按照ISO-8859-1(即Latin-1,单字节西欧编码)解码生成了字符串,才会出现打印的异常字符,只要逆向还原编码流程再按UTF-8重新解码即可得到正确文本,逻辑和你参考的在线UTF-8解码工具完全一致。
修复逻辑
- 将当前乱码字符串按ISO-8859-1编码规则转回原始字节序列,这一步得到的就是最初正确的UTF-8字节流
- 将得到的字节序列按UTF-8规则重新解码为字符串,即可得到正常可读的目标文本
Swift 实现代码
import Foundation // 待修复的乱码字符串 let corruptedText = "æç©ºè¦³å¯ã«æé©ãªãã±ã¼ã·ã§ã³" // 第一步:按Latin-1编码还原原始UTF-8字节流 guard let rawUTF8Data = corruptedText.data(using: .isoLatin1, allowLossyConversion: false) else { fatalError("字节还原失败,请检查输入字符串格式") } // 第二步:按UTF-8解码得到正确文本 guard let correctText = String(data: rawUTF8Data, encoding: .utf8) else { fatalError("UTF-8解码失败,请检查字节流完整性") } // 输出验证 print(correctText) // 控制台输出:星空観察に最適なロケーション
补充说明
- 上述代码使用系统内置编码实现,不需要引入任何第三方依赖
- 所有同类型「UTF-8字节流被误按Latin-1解码」产生的乱码,都可以用这套逻辑修复
- 代码中
allowLossyConversion参数设为false可以保证转换过程无信息丢失,避免修复结果出现异常字符
内容的提问来源于stack exchange,提问作者Kopera Marcel
相关产品推荐
相关产品推荐

