【问题标题】:Ruby encoding issue with nested key嵌套键的 Ruby 编码问题
【发布时间】:2013-04-25 04:45:43
【问题描述】:

为了解决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:inencode': "\xD0" 从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError)`

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

【问题讨论】:

    标签: ruby


    【解决方案1】:
    thing['subject'][1].force_encoding('utf-8')
    puts thing.to_json
    

    生产:

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

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

    【讨论】:

    • 哦,谢谢。你能建议递归遍历的快照吗?我知道,愚蠢的问题,但我在 Ruby 方面太弱了。
    • 我最终做到了。谢谢
    • 抱歉,我睡了几个小时。您似乎想出了一个很好的解决方案,作为对您其他问题的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多