5

为了解决YAML 不兼容的问题,我正在尝试用 Ruby 编写命令行脚本。问题在于我对 Ruby 完全不熟悉。

所以我制作了以下脚本:

require 'json'
require 'yaml'

thing = YAML.load('--- 
author_id: 
- 0
- 1
subject: 
- ""
- !binary |
  0KHQtNC10LvQsNGC0Ywg0LPRgNCw0LzQvtGC0L3Ri9C5INCy0L3QtdGI0L3Q
  uNC5INCy0LjQtCDQtNC70Y8g0LjQvNC10Y7RidC10LPQvtGB0Y8=
')

puts thing.to_json
# puts thing['subject'][1].to_json # Issues the same error

现在我得到了yaml2json.rb:15:inencode': "\xD0" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)`

如何让它认为解码的 base64 是 UTF-8?通常我不知道一个键的确切名称,subject只是一个例子。

4

1 回答 1

4
thing['subject'][1].force_encoding('utf-8')
puts thing.to_json

产生:

{"author_id":[0,1],"subject":["","Сделать грамотный внешний вид для имеющегося"]}

由于您不知道字符串将在哪里,因此目前想到的最佳选择是递归遍历哈希,强制编码所有字符串。可能有更优雅的解决方案。

于 2013-04-25T07:58:22.313 回答