我有一些数据是我通过dbi gem从数据库中提取的。返回的数据采用ASCII-8BIT编码。我已将它存储在哈希中,然后我将其作为yaml转储出来。问题是,它出现为二进制yaml,就像这样:
!binary "c3RhcnRfZGF0ZQ==": !binary |-
MjAxMy0xMC0wMQ==
我不想要这个。到目前为止,我所做的研究提出了一些可能性:
YAML::ENGINE.yamler = 'syck'
这样可行,但据我所知,syck不再被维护,因此看起来不太理想。
# encoding: utf-8
但我相信魔术编码字符串不适用于从数据库中提取的数据。
我也尝试过哈希并通过encode
方法将所有键和值转换为utf-8,但我也不喜欢。我理想的是能够做的事情就像YAML.dump(hash, :encode => 'utf-8')
,但我还没有找到办法。有没有办法用精神YAML引擎专门完成这个?
一些演示此问题的快速代码:
require 'yaml'
key = 'abc'.encode('ASCII-8BIT')
val = 'def'.encode('ASCII-8BIT')
hash = { key => val }
puts YAML.dump(hash)
# ---
# !binary "YWJj": !binary |-
# ZGVm