这段数据是用什么字符集编码的? 在 Swift 中用 base64 解码怎么解都是 nil

2022-12-08 22:10:42 +08:00
 FaiChou

数据中包含隐私信息, 所以先放个截图.

https://www.base64decode.org/ 中将数据放进去, 选择 AUTO-DETECT 是可以正确解码, 除此之外所有的选项都试过, 都不能正确解码, 有些中文会乱码, 有些则直接将中文变为空.

将正确解码后的数据再使用 CP936 字符集编码, 最接近原来的数据, 但还不完全一样.

使用 js 等工具可以正常解码, atob -> escape -> encodeURIComponent.

但在 Swift 中尝试了好多方法都不能正常解码, 全部都是 nil:

extension String {
    func base64DecodedUsingSJIS() -> String? {
        if let data = Data(base64Encoded: self) {
            let decodedString = String(data: data, encoding: .init(rawValue: CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(CFStringEncodings.shiftJIS.rawValue))))
            return decodedString
        }
        return nil
    }
    func base64Decoded() -> String? {
        guard let data = Data(base64Encoded: self) else { return nil }
        return String(data: data, encoding: .utf8)
    }
    func base64DecodedASCII() -> String? {
        guard let data = Data(base64Encoded: self) else { return nil }
        return String(data: data, encoding: .ascii)
    }
}
596 次点击
所在节点    程序员
3 条回复
codehz
2022-12-08 22:15:41 +08:00
eyJ 一看就是 json 开头的{"啦,结合斜杠特征,那就是 jwt 啦
Tanix2
2022-12-08 22:29:17 +08:00
试试这个网站能检测出来不: https://base64.guru/tools/character-encoding
wdlth
2022-12-08 22:34:55 +08:00
https://cryptii.com/
你可以用这个网站解码,选 Bytes ,可以看到 16 进制值,这样可以更方便的辨别。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/901193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX