2011-01-14 63 views
1

这是一个奇怪的问题。我有一个mashalled对象(cookie),这是一个包含2个已经被base64编码的对象的数组。我解码这个使用decode64和marshal.load它并得到阵列回来罚款。Ruby元帅模块奇怪的问题

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

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

红宝石的相同版本。我错过了什么?

#!/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" 
+0

可能要重新格式化您的文章一点点。 – 2011-01-14 19:49:23

回答

1

如芸香上红宝石琅freenode上指出的那样,有一个在编码的差在irb vs脚本。

foo.encoding脚本 - >#<Encoding:US-ASCII>
foo.encoding在IRB - >#<Encoding:UTF-8>

添加脚本以下魔法注释解决问题

#encoding: utf-8