2013-04-25 49 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