base64.urlsafe_b64encode(S)
使用URL和文件系统安全字母表对字符串进行编码 替换 - 而不是标准Base64中的+和_而不是/ 字母。结果仍然可以包含=。
简而言之,python url-safe base64似乎不会编码'='。
当我的paramkey包含'='(例如“hello = world”)时,我必须对其进行urlencode,否则我的param键将被解释为“hello”并且值为“world = someval”。有什么情况我必须在我的param值中编码'='吗?
答案 0 :(得分:0)
不,当base64编码数据所有字节值都被编码并且输出不会包含不是base64字符的文字=
字符。输入数据在这里具有什么ASCII值并不重要。
您可以轻松测试:
>>> import base64
>>> base64.b64encode(b'=')
b'PQ=='
>>> base64.b64decode(base64.b64encode(b'='))
b'='
在上面,=
字符代表十六进制的0x3D
字节值(=
的ASCII代码点),该值编码为PQ
( 0x3D
的前6位是001111
,因此15,转换为字母P
,然后剩余的01
和0000
来自不存在的Q
下一个字节使16 =
},然后是两个填充m <- matrix(c("1", "2", "3", "4", "5", "6", "7", "8", "9",
"HG00096", "HG00097", "HG00098", "HG00099", "HG00100", "HG00101","HG00102", "HG00103", "HG00103"), ncol=2)
index <- c("1", "4", "9")
m[m[, 1] %in% index, ]
个字符。
请注意,equals符号实际上仅用作填充。许多解码器在最后容忍丢失的填充,如果不能,则容易添加填充。
另一方面,URL编码只编码一些字符,而不是全部;有40个字符永远不需要编码(a-z,A-Z,数字和 - ,_,。和〜),而另外18个字符带有特殊含义,因此需要进行转义。这是非保留字符和保留字符的混合,这意味着如果它们没有特殊含义,你必须逃避一些字符。
答案 1 :(得分:0)
文档中没有讨论输入字符串中的=
(其中所有其他字符都是base64编码的),而是关于编码字符串中可能出现的=
。
现在,=
只能出现在base64编码的字符串的末尾,并且完全没用(它只是用作填充以达到4个字符的倍数)。您可以修剪它并在线的另一端重新添加它(如果你的base64解码器如此挑剔)。