为了解决problem with YAML incompatibility我试图在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:in
编码':“\ xD0”从ASCII-8BIT到UTF-8(编码:: UndefinedConversionError)`
如何让它认为解码的base64是UTF-8?通常我不知道密钥的确切名称,subject
只是一个例子。
答案 0 :(得分:4)
thing['subject'][1].force_encoding('utf-8')
puts thing.to_json
产地:
{"author_id":[0,1],"subject":["","Сделать грамотный внешний вид для имеющегося"]}
由于您不知道字符串的位置,目前想到的最佳选择是递归遍历Hash,force_encoding所有字符串。可能有一个更优雅的解决方案。