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
相关产品推荐
相关产品推荐

