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

Project1

 找回密码
 注册会员
搜索
查看: 2088|回复: 2
打印 上一主题 下一主题

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

[复制链接]

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

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

烫烫烫开拓者

1
发表于 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-5-8 05:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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