有人可以解释一下,为什么会有两个不同的输出?
代码输入IRB(交互式红宝石外壳):
irb(main):001:0> require 'base64'
=> true
irb(main):002:0> cookie = "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D"
=> "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D"
irb(main):003:0> decoded_cookie = Base64.urlsafe_decode64(URI.decode(cookie))
=> "asdfg--0D\x02 /\x8B\xDEM\x1A\a \x93U\xB4\xA7%\n\\Q(\xE8\x8B\x84\xBD\xDCa\x9A\xB7\xCB\xA8\xD5i\xB2@\xEF\xE4\x02 V\x7F0|\x85\x9F\xD3.5q\xBF\xB1\xF4\x8D\x1A\x87\xFE\x01 \x87\x91'\x9E'_j\x86s\x1C9\xEB\xB6"
来自Linux终端的代码:
asd@asd:~# ruby script.rb
asdfg--0D /��M� �U��%
\Q(苄��a��˨�i�@�� V0|���.5q������ ��'�'_j�s9�
脚本:
require 'base64'
require 'ecdsa'
cookie = "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D"
def decode_cookie(cookie)
decoded_cookie = Base64.urlsafe_decode64(URI.decode(cookie))
end
puts (decode_cookie(cookie))
我如何在终端中获得相同的输出? 我需要输出:
“ asdfg--0D \ x02 / \ x8B \ xDEM \ x1A \ a \ x93U \ xB4 \ xA7%\ n \ Q(\ xE8 \ x8B \ x84 \ xBD \ xDCa \ x9A \ xB7 \ xCB \ xA8 \ xD5i \ xB2 @ \ xEF \ xE4 \ x02 V \ x7F0 | \ x85 \ x9F \ xD3.5q \ xBF \ xB1 \ xF4 \ x8D \ x1A \ x87 \ xFE \ x01 \ x87 \ x91'\ x9E'_j \ x86s \ x1C9 \ xEB \ xB6“
在Linux终端中。
答案 0 :(得分:0)
像"\x8B"
这样的字符串代表字符,而不是文字\x8B
。如果Ruby缺少用于显示字符的字体,或者它与白色间距混淆(例如"\n"
是换行符,而不是\
后跟n
),则Ruby使用这种表示形式。
在irb中获得另一个输出的原因是因为您没有使用puts
打印字符串(就像您在脚本中一样)。只需调用decoded_cookie
即可返回字符串表示形式,而不是实际内容。
您可以通过将实际内容打印到输出中来显示实际内容。
require 'base64'
cookie = "YXNkZmctLTBEAiAvi95NGgcgk1W0pyUKXFEo6IuEvdxhmrfLqNVpskDv5AIgVn8wfIWf0y41cb%2Bx9I0ah%2F4BIIeRJ54nX2qGcxw567Y%3D"
decoded_cookie = Base64.urlsafe_decode64(URI.decode(cookie))
puts decoded_cookie
# asdfg--0D /��M �U��%
# \Q(苄��a��˨�i�@�� V0|���.5q����� ��'�'_j�s9�
#=> nil
您可以找到有关"\xnn"
表示形式here的更多信息。
如果您希望脚本显示字符串表示形式,请使用p
而不是puts
,或使用puts decoded_cookie.inspect
。