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

Base64解码时如何保留回车符( 、 )信息?

解决Base64解码时保留回车符的问题

问题分析

你的原字符串里包含HTML转义后的回车符
和实际的回车符 (对应ASCII码0x0D),当前代码存在两个核心问题:

  • 未处理HTML实体
,导致它被当作普通字符而非回车符参与解码;
  • 使用了.ignoreUnknownCharacters选项,会直接忽略所有非Base64标准字符(包括你需要保留的回车符)。

解决方案

修改代码,先处理HTML实体转义,再移除可能误删字符的解码选项,具体实现如下:

func base64Decoded() -> String? {
    // 第一步:将HTML转义的回车符
替换为实际的\r字符
    var processedString = self.replacingOccurrences(of: "
", with: "\r")
    
    // 处理Base64填充补位
    let remainder = processedString.count % 4
    if remainder > 0 {
        processedString = processedString.padding(
            toLength: processedString.count + 4 - remainder,
            withPad: "=",
            startingAt: 0
        )
    }
    
    // 第二步:不使用.ignoreUnknownCharacters,避免忽略需要保留的字符
    // Base64标准允许用换行符分割长串,默认会自动处理合法的分隔换行
    guard let decodedData = Data(base64Encoded: processedString) else {
        return nil
    }
    
    return String(data: decodedData, encoding: .utf8)
}

验证方法

若想确认回车符是否真的保留,可以打印解码后字符串的每个字符ASCII码:

if let decodedStr = yourTargetString.base64Decoded() {
    decodedStr.forEach { char in
        print("\(char): \(char.asciiValue ?? 0)")
    }
}

回车符\r对应的ASCII码是13,若输出中存在该值,说明回车符已成功保留。

内容的提问来源于stack exchange,提问作者desertSniper87

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:53:20