首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby编组模块的奇怪问题

Ruby编组模块的奇怪问题
EN

Stack Overflow用户
提问于 2011-01-14 19:44:39
回答 1查看 1.5K关注 0票数 1

这是个奇怪的问题。我有一个混搭的对象(Cookie),一个包含2个对象的数组,该数组已经被base64编码。我使用decode64和marshal.load对其进行解码,并将数组恢复得很好。

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

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

同样版本的红宝石。我遗漏了什么?

代码语言:javascript
复制
#!/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"])  

输出:

代码语言:javascript
复制
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产出:

代码语言:javascript
复制
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"  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-14 20:13:44

正如freenode上的ruby所指出的,irb与脚本在编码上存在差异。

脚本中的foo.encoding -> #<Encoding:US-ASCII>

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

在脚本中添加以下神奇注释可以解决这个问题

#encoding: utf-8

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4695207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档