#encoding: utf-8 obj = "keywords" File.open('test', 'wb'){|f| f.write Marshal.dump(obj)} Marshal.load(File.open('test', &:read))
ruby 1.9 运行即出错,问题出在 keywords 这个特定的字符组合
感觉只可以做些自定义的转码来解决。。有没有不那么麻烦的方法啊。。。
好吧,我解决了
def process obj case obj when String obj.chars.map{|x| x.ord}.join('.') when Array obj.map{|x| process x} when Hash new_hash = {} obj.each do |k,v| new_hash[process k] = process v end new_hash else obj end end def recover obj case obj when String obj.split('.').map{|x| x.to_i.chr(Encoding.find('utf-8'))}.join when Array obj.map{|x| recover x} when Hash new_hash = {} obj.each do |k,v| new_hash[recover k] = recover v end new_hash else obj end end
dump 之前 process load 之后 recover
本质是把字符串改成数字的字符串,虽然应该也会有隐患,但是目前看来还没有问题
这 BUG 真是太坑爹,5 个小时就这么没了
win OS 里 File.open 要用 'rb' 模式吧
#2 楼 @windwiny 看来确实是,以前 binary 和普通读混用没注意这点。。 啊,兜了好大的圈子
测试一下