首页 > 解决方案 > Swift base64 解码非字母和非 utf-8 字符串

问题描述

是否可以使用包含非 utf8 编码(即 Windows-1252 或 ISO-8859-1)的字符串的 Swift 语言 base64 编码字符串正确解码?

可以在 stackoverflow 上找到的每个代码片段都失败并返回 nil。

例如 let decodedData = NSData(base64EncodedString: base64String, options:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)

给空,因为它忽略坏字符,如果我不使用这个选项,它会像许多其他 gist 代码一样给出 nil

这是包含我需要解码的部分加密密钥的测试 base64 字符串。如果我使用 Python、PHP 或 Java 等其他语言,它可以正确解码,但使用 Swift 我不能这样做。

FkXKDAAAAAAAAAAAvMBAYFk1JADmiwHAz+rNFy93faklHL7MW3Hhlf1Bo7/hpZ3j1GmdySyIpJ4YlRH65mleumYqsgUgYLlQY/jQq2YykMPUwZQ4jTgU7Q==应该EʼÀ@`Y5$æ‹ÀÏêÍ/w}©%¾Ì[qá•ýA£¿á¥ãÔiÉ,ˆ¤ž•úæi^ºf*² `¹PcøЫf2ÃÔÁ”88í

因为它可以用这样的在线工具解码

这是另一个:

FgdhDAAAAAAABwAAOJAiYMxlJQAMbwHAWrYq59+po4WdMS4R+EHV4hBKzWn8oZYpTFdFQ33usZUa19d+umkWcL2g4mmVeUOwUG2dZGWIrxlTWJA+s/RTTQ==

请告知有没有办法在iOS设备上本地解码像这样的base64字符串,或者我真的需要将它发送到服务器来做到这一点?

标签: swiftbase64swift4decodeswift5

解决方案


你正在寻找一个相当古老的例子。语法更改为:

let decodedData = Data(base64Encoded: base64String)

我已经用你的例子进行了测试,它们工作得很好。请记住,输出是原始数据,这不是任何编码(Windows-1252 或 ISO-8859-1 等)的字符串。它只是一个随机字节序列,这就是预期的结果。您使用的在线工具只是试图将其解码为 ISO-8859-1,但这是胡言乱语,实际上在您显示的输出中已损坏。它不显示第一个字节(即 0x16,不可打印)。


推荐阅读