Swift base64 解码非字母和非 utf-8 字符串
Swift base64 decode non alphabetic and non utf-8 strings
是否可以使用 Swift 语言 base64 编码的字符串正确解码,其中包含非 utf8 编码的字符串(即 Windows-1252 或 ISO-8859-1)?
在 Whosebug 上可以找到的每个代码片段都失败了,return 没有。
例如
let decodedData = NSData(base64EncodedString: base64String, options:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
给出空,因为它忽略了坏字符,如果我不使用这个选项,它会像许多其他要点代码一样给出 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 字符串,或者我真的需要将它发送到服务器才能做到这一点?
你正在寻找一个相当古老的例子。语法更改为:
let decodedData = Data(base64Encoded: base64String)
我已经用您的示例进行了测试,它们运行良好。请记住,输出是原始数据,这不是任何编码(Windows-1252 或 ISO-8859-1 等)的字符串。它只是一个随机字节序列,这就是预期的样子。您正在使用的在线工具只是试图将其解码为 ISO-8859-1,但这是乱码,实际上在您显示的输出中已损坏。它不显示第一个字节(即 0x16,不可打印)。
是否可以使用 Swift 语言 base64 编码的字符串正确解码,其中包含非 utf8 编码的字符串(即 Windows-1252 或 ISO-8859-1)?
在 Whosebug 上可以找到的每个代码片段都失败了,return 没有。
例如
let decodedData = NSData(base64EncodedString: base64String, options:NSDataBase64DecodingOptions.IgnoreUnknownCharacters)
给出空,因为它忽略了坏字符,如果我不使用这个选项,它会像许多其他要点代码一样给出 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 字符串,或者我真的需要将它发送到服务器才能做到这一点?
你正在寻找一个相当古老的例子。语法更改为:
let decodedData = Data(base64Encoded: base64String)
我已经用您的示例进行了测试,它们运行良好。请记住,输出是原始数据,这不是任何编码(Windows-1252 或 ISO-8859-1 等)的字符串。它只是一个随机字节序列,这就是预期的样子。您正在使用的在线工具只是试图将其解码为 ISO-8859-1,但这是乱码,实际上在您显示的输出中已损坏。它不显示第一个字节(即 0x16,不可打印)。