swift - 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字符串,或者我真的需要将它发送到服务器来做到这一点?
解决方案
你正在寻找一个相当古老的例子。语法更改为:
let decodedData = Data(base64Encoded: base64String)
我已经用你的例子进行了测试,它们工作得很好。请记住,输出是原始数据,这不是任何编码(Windows-1252 或 ISO-8859-1 等)的字符串。它只是一个随机字节序列,这就是预期的结果。您使用的在线工具只是试图将其解码为 ISO-8859-1,但这是胡言乱语,实际上在您显示的输出中已损坏。它不显示第一个字节(即 0x16,不可打印)。
推荐阅读
- javascript - 如何使用 Python 触发 javascript 事件
- mongodb - mongdb 在时隙中查找用户
- c# - Control.Invoke 到底在做什么?
- ember.js - 如何更新对象数组的特定属性?
- python-3.x - Python没有读取我的while循环和if语句中的所有比较运算符
- scala - How to write pointcut with customized annotation to print the global variable value that used in a function?
- ruby - Ruby - select items from an array of tuples using items from an other array containing a single field
- python - ndarray 到字符串操作
- scala - 如何将完全形成的 SQL 与 Spark 结构化流结合使用
- visual-studio-code - Ionide F# - 整理所有文件