Ruby封送处理模块的奇怪问题

Ruby封送处理模块的奇怪问题,ruby,marshalling,irb,Ruby,Marshalling,Irb,这是一个奇怪的问题。我有一个mashalled对象(cookie),一个包含2个对象的数组,它已被base64编码。我使用decode64和marshal.load对其进行解码,并将数组恢复正常 现在,我获取这个数组并marshal.dump它,并将其与原始表示进行比较。这两种编码不匹配。字符串末尾的EF与第二个字符串上的ET 奇怪的是,如果我使用irb,它们是匹配的 相同版本的ruby。我错过了什么 #!/usr/bin/env ruby -v require "base64" re

这是一个奇怪的问题。我有一个mashalled对象(cookie),一个包含2个对象的数组,它已被base64编码。我使用decode64和marshal.load对其进行解码,并将数组恢复正常

现在,我获取这个数组并marshal.dump它,并将其与原始表示进行比较。这两种编码不匹配。字符串末尾的EF与第二个字符串上的ET

奇怪的是,如果我使用irb,它们是匹配的

相同版本的ruby。我错过了什么

#!/usr/bin/env ruby -v  

require "base64"  
require "cgi"  

cookie = "BAhbB2kHSSJFNThhYmY3ZjRiOWY0OTc4NjMxOTNhNTllMzQ1YjYxNTVlMGE2NTIzZDNjZmZmZDYxNWQwNTVhNmJkMzI0ZWIxYQY6BkVU"  
p Marshal.load(Base64.decode64(cookie))  
p Base64.decode64(cookie)  
p Marshal.dump([2, "58abf7f4b9f497863193a59e345b6155e0a6523d3cfffd615d055a6bd324eb1a"])  

输出:

ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.5.0]  
[2, "58abf7f4b9f497863193a59e345b6155e0a6523d3cfffd615d055a6bd324eb1a"]  
"\x04\b[\ai\aI\"E58abf7f4b9f497863193a59e345b6155e0a6523d3cfffd615d055a6bd324eb1a\x06:\x06ET"  
"\x04\b[\ai\aI\"E58abf7f4b9f497863193a59e345b6155e0a6523d3cfffd615d055a6bd324eb1a\x06:\x06EF"

irb输出:

ruby-1.9.2-p136 :001 > p Marshal.dump([2, "58abf7f4b9f497863193a59e345b6155e0a6523d3cfffd615d055a6bd324eb1a"])  
"\x04\b[\ai\aI\"E58abf7f4b9f497863193a59e345b6155e0a6523d3cfffd615d055a6bd324eb1a\x06:\x06ET"  
 => "\x04\b[\ai\aI\"E58abf7f4b9f497863193a59e345b6155e0a6523d3cfffd615d055a6bd324eb1a\x06:\x06ET"  

正如ruby上的rue和freenode上的lang所指出的,irb和脚本中的编码是不同的

foo.encoding在脚本中->
#

在irb中进行foo.encoding->
#

向脚本中添加以下神奇注释可以解决此问题


#编码:utf-8

正如rue在freenode上的ruby-lang所指出的那样,irb与脚本的编码方式有所不同

foo.encoding在脚本中->
#

在irb中进行foo.encoding->
#

向脚本中添加以下神奇注释可以解决此问题


#编码:utf-8

可能需要重新格式化您的帖子。可能需要重新格式化您的帖子。