2011-01-14 12 views
1

Dies ist ein seltsames Problem. Ich habe ein mashalled Objekt (Cookie), ein Array mit 2 Objekten, welches Base64-kodiert wurde. Ich dekodiere das mit decode64 und marshal.load es und bekomme das Array wieder gut.Seltsames Problem mit Ruby Marshal Modul

Jetzt nehme ich dieses Array und marshal.dump es und vergleiche es mit der ursprünglichen Darstellung. Die 2 Kodierungen stimmen nicht überein. EF am Ende der Zeichenfolge vs ET auf der zweiten.

Komischerweise passen sie zusammen, wenn ich irb verwende.

Gleiche Version von Rubin. Was vermisse ich?

#!/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"]) 

Output:

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 output:

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

möchten Ihre Post zu formatieren ein bisschen. –

Antwort

1

Als rue auf rubin lang auf Freenode merkt, gibt es einen Unterschied in der Codierung war in irb vs Skript.

foo.encoding in Skript ->#<Encoding:US-ASCII>
foo.encoding in irb ->#<Encoding:UTF-8>

den folgenden Zauber Kommentar zu Skript Hinzufügen behebt das Problem

#encoding: utf-8