Ruby嵌套键的编码问题

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只是一个示例。

1个回答

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

产生:

{"author_id":[0,1],"subject":["","为现有的内容创建优雅的外观"]}

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


哦,谢谢。你能推荐一下递归遍历的快照吗?我知道这是一个愚蠢的问题,但我对Ruby不太熟悉。 - Pavel Koryagin
我最终做到了。谢谢。 - Pavel Koryagin
抱歉,我正在睡觉。看起来你已经想出了一个好的解决方案并在另一个问题的答案中发布了。 - Darshan Rivka Whittle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接