在 Ruby 1.9.2 之前,YAML 的解析使用的是 Syck 这个引擎,而从 1.9.3 之后,默认的引擎变成了 Psych。Psych 相比 Syck 有以下优点:
- 可以正确处理 UTF-8 字符。
- 基于的底层库是 YAML 标准组所写的 libyaml。
- 支持 YAML 1.1。
- Syck 已经不再维护了。
UTF-8 字符串的处理是 Psych 和 Syck 之间最主要的一个区别:
Syck 因为无法直接处理 UTF-8 字符,所以如果导出的值中含有 UTF-8 字符串的话,Syck 会把它 Base64 编码,然后保存为 binary 格式:
:title: !binary |-
Psych 可以正确序列化 UTF-8 字符,所以 YAML 中保存的就是原始字符:
---
a: 中文1
切换方法是:
YAML::ENGINE.yamler = 'psych'
参考网站:http://galeki.is-programmer.com/posts/32636
这里有详细的说明。