gpt4 book ai didi

ruby - Thor & YAML 输出为二进制文件?

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:02 33 4
gpt4 key购买 nike

我正在使用 Thor 并尝试将 YAML 输出到文件。在 irb 中,我得到了我所期望的。 YAML 格式的纯文本。但是当 Thor 中的方法的一部分时,它的输出是不同的......

class Foo < Thor
include Thor::Actions

desc "bar", "test"
def set
test = {"name" => "Xavier", "age" => 30}
puts test
# {"name"=>"Xavier", "age"=>30}
puts test.to_yaml
# !binary "bmFtZQ==": !binary |-
# WGF2aWVy
# !binary "YWdl": 30
File.open("data/config.yml", "w") {|f| f.write(test.to_yaml) }
end
end

有什么想法吗?

最佳答案

所有 Ruby 1.9 字符串都附加了编码。

YAML 将一些非 UTF8 字符串编码为二进制,即使它们看起来无害,也没有任何高位字符。您可能认为您的代码始终使用 UTF8,但内置函数可以返回非 UTF8 字符串(ex 文件路径例程)。

为避免二进制编码,请在调用 to_yaml 之前确保所有字符串编码均为 UTF-8。使用 force_encoding("UTF-8") 方法更改编码。

例如,这是我将我的选项散列编码到 yaml 中的方式:

options = {
:port => 26000,
:rackup => File.expand_path(File.join(File.dirname(__FILE__), "../sveg.rb"))
}
utf8_options = {}
options.each_pair { |k,v| utf8_options[k] = ((v.is_a? String) ? v.force_encoding("UTF-8") : v)}
puts utf8_options.to_yaml

这是一个将简单字符串编码为二进制的 yaml 示例

>> x = "test"
=> "test"
>> x.encoding
=> #<Encoding:UTF-8>
>> x.to_yaml
=> "--- test\n...\n"
>> x.force_encoding "ASCII-8BIT"
=> "test"
>> x.to_yaml
=> "--- !binary |-\n dGVzdA==\n"

关于ruby - Thor & YAML 输出为二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9550330/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com