设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2046|回复: 2

[已经解决] Ruby 1.9.2 下String的Marshal问题

[复制链接]

Lv3.寻梦者

孤独守望

梦石
0
星屑
3121
在线时间
1534 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

发表于 2012-7-19 13:28:58 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 IamI 于 2012-7-19 15:01 编辑

RUBY 代码复制
  1. class A < Array
  2.   def initialize
  3.     @b = :b
  4.   end
  5. end
  6. a = A.new
  7. a.push(999)
  8. a.push("999")
  9. save_data(a,"x.data")
  10. exit


=>
IC:A[i?I"999:ET:@b:b

<=>
04 08 49 43 3A 06 41 5B 07 69 02 E7 03 49 22 08
39 39 39 06 3A 06 45 54
06 3A 07 40 62 3A 06 62
<=>
. . I C : . A [ . i . ? I " .
9 9 9 . : . E T
. : . @ b : . b
红字部分
I 后接着一个字符串起始号,这不科学!
此外
读取知
argument 数量为1:
T = true

这个T是什么东西?还没“@”

@第七水螰@OrzFly
相关传送门

点评

UI> 紫苏老板换账号了。  发表于 2012-7-19 13:30
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客

Lv1.梦旅人

昨日的黄昏

梦石
0
星屑
106
在线时间
936 小时
注册时间
2006-11-5
帖子
4128

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

发表于 2012-7-19 18:52:42 | 显示全部楼层
http://www.kuqin.com/rubycndocument/man/Marshal_format.html

别激动的啊= =

说明文档很清楚了
nil,true,false
分别是'0', 'T', 'F'
[url=http://weibo.com/2238291690?s=6uyXnP]
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60300
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

发表于 2012-7-19 19:31:39 | 显示全部楼层
本帖最后由 orzfly 于 2012-7-19 19:36 编辑

这东西我上次就跟你说了 N 次了……
String 会变成一个含有 :E 这个 instance_variable 且值为 true 的结构嘛。
有实例变量的 String 自然用 I 这个来储存 instance_variable 了。

目测你的 Marshal 处理是把 IC 连起来处理了。其实仔细看看 Ruby 的源代码或者 IronRuby 的实现就能知道 I 后面跟着一个按照 Marshal 格式的对象,然后接下来是实例变量数,然后一个 Symbol 然后一个 Object ……

至于 :E,恐怕是为了避免改变 Marshal 规范中而想出来的兼容之法吧。

:E 其实和字符串的编码有关。
您看下面的例子:
RUBY 代码复制
  1. [1] pry(main)> Marshal.dump("orzFly")
  2. => "\x04\bI\"\vorzFly\x06:\x06ET"
  3. [2] pry(main)> Marshal.dump("orzFly".force_encoding("utf-8"))
  4. => "\x04\bI\"\vorzFly\x06:\x06ET"
  5. [3] pry(main)> Marshal.dump("orzFly".force_encoding("gb2312"))
  6. => "\x04\bI\"\vorzFly\x06:\rencoding\"\vGB2312"
  7. [4] pry(main)> Marshal.dump("orzFly".force_encoding("gbk"))
  8. => "\x04\bI\"\vorzFly\x06:\rencoding\"\bGBK"
  9. [5] pry(main)> Marshal.dump("orzFly".force_encoding("ascii"))
  10. => "\x04\bI\"\vorzFly\x06:\x06EF"
  11. [6] pry(main)> Marshal.dump("orzFly".force_encoding("utf-16le"))
  12. => "\x04\bI\"\vorzFly\x06:\rencoding\"\rUTF-16LE"
  13. [7] pry(main)> Marshal.dump("orzFly".force_encoding("utf-16be"))
  14. => "\x04\bI\"\vorzFly\x06:\rencoding\"\rUTF-16BE"

评分

参与人数 1星屑 +600 收起 理由
IamI + 600 谢谢。

查看全部评分

我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-18 22:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表