5

Could anyone help me here to understand when we need to consider the below 4 methods:

strict_decode64(str)
strict_encode64(bin)
urlsafe_encode64(bin)
urlsafe_decode64(str)

From the doc also I didn't get any examples. So examples with explanation might be helpful for me to understand.

Thanks in advance

4

2 回答 2

4

一个使用示例是:

require "base64"
Base64.strict_encode64('Stuff to be encoded')
Base64.strict_decode64("U3R1ZmYgdG8gYmUgZW5jb2RlZA==")

严格意味着在解码时拒绝空格/CR/LF,并且在编码时不添加 CR/LF。

请注意,如果以下内容被接受:

Base64.decode64("U3R1ZmYgdG8gYmUgZW5jb2RlZA==\n")

严格来说,由于尾随(换行),上述内容不被接受,并且\n以下行将引发ArgumentError: invalid base64异常:

Base64.strict_decode64("U3R1ZmYgdG8gYmUgZW5jb2RlZA==\n")

所以 strict 在解码时只接受/预期字母数字字符,在编码时只返回字母数字字符。

请尝试以下方法,看看一个编码如何用'\n'(linefeed) 每 60 个字符换行一次,而严格的不是:

print Base64.encode64('I will not use spaces and new lines. I will not use spaces and new lines. I will not use spaces and new lines. I will not use spaces and new lines.I will not use spaces and new lines.')


print Base64.strict_encode64('I will not use spaces and new lines. I will not use spaces and new lines. I will not use spaces and new lines. I will not use spaces and new lines.I will not use spaces and new lines.')
于 2013-03-08T19:34:40.490 回答
4

_encode和做相反的_decode事情:第一个将普通字符串转换为编码字符串,第二个将编码字符串转换为普通字符串。

str = "Hello!"
str == decode64(encode64(str)) # This is true

strict_和之间的区别在于urlsafe_将在编码字符串中使用的字符。当您需要在 URL 中传递字符串时,不允许使用所有字符(/例如,因为它在 URL 中具有特殊含义),因此您应该使用该urlsafe_版本。

于 2013-03-08T19:27:56.883 回答