混淆了base64类的方法用法

时间:2013-03-08 19:21:19

标签: ruby

有谁可以帮助我在这里了解我们何时需要考虑 以下4种方法:

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

从文档中我也没有得到任何例子。这样的例子 解释可能对我有所帮助。

提前致谢

2 个答案:

答案 0 :(得分:4)

_encode_decode执行相反的操作:第一个将正常字符串转换为编码字符串,第二个将编码字符串转换为普通字符串。

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

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

答案 1 :(得分: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异常:< / p>

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

严格接受/只需要在解码时使用字母数字字符,并在编码时只返回字母数字。

请尝试以下操作,看看一个编码如何使用'\n'(换行)每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.')