我在编码数据时遇到问题。我的令牌有1228个字符和
let data = Data(base64Encoded: tokenString)!
工作正常,但是当我向令牌添加一些信息并且令牌有1263个字符时,Data(base64Encoded:)
返回nil。
我认为问题在于字符串长度或Data(base64Encoded:)
。
Data(base64Encoded:)
是否对字符长度有限制?
请给我一些有关此问题的信息。
答案 0 :(得分:2)
不确定如何编码修改后的令牌,但是看起来编码后的Base64字符串不包含padding字符。将=
附加到修改后的令牌似乎可以解决解码问题:
// original token -> 57 bytes
let data1 = Data(base64Encoded: "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyMTF9")
// modified token -> nil
let data2 = Data(base64Encoded: "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyMX0")
// modified token with '=' for padding -> 56 bytes
let data2Fixed = Data(base64Encoded: "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyMX0=")
// decodes correctly: "{"sub":"1234567890","name":"John Doe","iat":15162390221}"
let string = String(data: data2Fixed!, encoding: .utf8)
因此,要正确解决该问题,您可能需要研究编码器。希望有帮助!