2013-04-25 86 views
3

为了解决problem with YAML incompatibility我试图在Ruby中编写命令行脚本。这是我完全不熟悉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只是一个例子。

回答

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

产地:

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

既然你不知道字符串会,我想到的此刻是递归遍历哈希,force_encoding所有字符串的最佳选择。可能有更优雅的解决方案。

+0

噢,谢谢。你能建议递归遍历的快照吗?我知道,愚蠢的问题,但我在Ruby中太弱了。 – 2013-04-25 08:56:12

+0

我最终做到了。谢谢 – 2013-04-25 10:44:16

+0

对不起,我正在睡几个小时。看起来你提出了一个很好的解决方案,作为你的其他问题的答案。 – 2013-04-25 14:25:03