Ruby Prism解析器编码问题:使用dump_file查看AST时输出乱码
Ruby Prism解析器编码问题:使用dump_file查看AST时输出乱码
嗨,我来帮你理清这个问题~其实你遇到的不是编码错误,而是对Prism的dump_file方法用途理解有点偏差哦!
先还原下你的场景:
你想查看这段Ruby代码(input.rb)的Prism AST:
x = 8 + 55 * 14 # this is a comment ... puts ">> the value is #{x}"
然后你写了这段代码尝试输出AST:
require "prism" puts Prism.dump_file('input.rb')
执行后得到了一堆乱码:
$ ruby main.rb PRISMUTF-8(D�wC�C` RR --�...0>>�@^@AB (
问题原因
Prism的dump_file方法输出的是二进制序列化格式的AST数据,它的设计目的是用于序列化存储或者在进程间传递AST,本来就不是给人类直接阅读的,所以直接用puts输出会显示成乱码。
解决方案
如果想查看人类可读的AST结构,你可以用这两种方法:
- 解析文件后调用
pretty_inspect输出结构化内容
require "prism" ast = Prism.parse_file('input.rb') puts ast.pretty_inspect
- 直接使用
pretty_print_file方法输出格式化后的AST
require "prism" Prism.pretty_print_file('input.rb')
这样就能得到清晰、易读的AST内容啦!
备注:内容来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

