当用作查询参数值时,是否需要对'='进行百分比编码?

时间:2017-02-25 13:05:28

标签: python base64

From Python docs

  

base64.urlsafe_b64encode(S)

     

使用URL和文件系统安全字母表对字符串进行编码   替换 - 而不是标准Base64中的+和_而不是/   字母。结果仍然可以包含=。

简而言之,python url-safe base64似乎不会编码'='。

当我的paramkey包含'='(例如“hello = world”)时,我必须对其进行urlencode,否则我的param键将被解释为“hello”并且值为“world = someval”。有什么情况我必须在我的param值中编码'='吗?

2 个答案:

答案 0 :(得分:0)

不,当base64编码数据所有字节值都被编码并且输出不会包含不是base64字符的文字=字符。输入数据在这里具有什么ASCII值并不重要。

您可以轻松测试:

>>> import base64
>>> base64.b64encode(b'=')
b'PQ=='
>>> base64.b64decode(base64.b64encode(b'='))
b'='

在上面,=字符代表十六进制的0x3D字节值(=的ASCII代码点),该值编码为PQ0x3D的前6位是001111,因此15,转换为字母P,然后剩余的010000来自不存在的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解码器如此挑剔)。

相关问题