ruby用dump写yaml文件的中文乱码问题

2012-11-14  刘俊 

今天遇到个问题,就是往yaml文件里面写入中文内容的时候,用dump方法写进去的不是期望值。查阅了很多资料以后大概知道了原因,在这里记录一下。
在 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 |-

  5qCH562+5LqR

Psych 可以正确序列化 UTF-8 字符,所以 YAML 中保存的就是原始字符:
---
a: 中文1

切换方法是:
YAML::ENGINE.yamler = 'psych'

参考网站:http://galeki.is-programmer.com/posts/32636
这里有详细的说明。

847°/8453 人阅读/2 条评论 发表评论

尹小丹  2012-11-15

你们公司用的是rspec?


刘俊  2012-11-20

尹小丹: 你们公司用的是rspec?
不是,自定义的框架,不用BDD框架,不合适


登录 后发表评论