2011-01-14 60 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