gpt4 book ai didi

Ruby 1.9、YAML 和字符串编码 : how to lead a life of sanity?

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

在我看来,ruby 1.9 附带的 YAML 库是编码失聪的。

这意味着在生成 YAML 时,它将采用任何字节串,并转义任何不输出干净 ASCII 的字节序列。这很蹩脚,但可以接受。

我的问题恰恰相反。从所述 YAML 转储加载内容时。

在下面的示例中,我创建了一个 UTF-8 字符串,将其转储为 !binary 类型。当我加载它时,它的编码是 ASCII-8BIT。在示例的最后,我尝试将原始字符串和重新加载的字符串与另一个 UTF-8 字符串连接起来。后者将因 Encoding::CompatibilityError 而失败。

require 'yaml'
s0 = "Iñtërnâtiônàlizætiøn"
y = s0.to_yaml
s1 = YAML::load y
puts s0 # => Iñtërnâtiônàlizætiøn
puts s0.encoding # => UTF-8
puts s1 # => Iñtërnâtiônàlizætiøn
puts s1.encoding # => ASCII-8BIT
puts y # => --- !binary |
# ScOxdMOrcm7DonRpw7Ruw6BsaXrDpnRpw7hu
puts "ñårƒ" + s0 # => ñårƒIñtërnâtiônàlizætiøn
puts "ñårƒ" + s1 # => Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT

我认为很明显,当您处理一些包含嵌套哈希和带叶字符串的数组的 YAML 源时,这会很快导致麻烦。

目前我有一些代码遍历所有哈希和数组并在每个字符串上调用 force_encoding。至少可以说,这是不雅观的。

我现在正在寻找的是一种方法来告诉 YAML::load 任何进来的字符串都应该被视为,因此有它的编码设置为 UTF-8。


理想情况下,ruby 的 YAML 应该只用正确的编码注释它转储的字符串。有一个 Ya2YAML 项目试图转储 UTF-8 安全 YAML。我不确定它有多远。如果有人玩过它,我欢迎任何想法。

无论如何,我仍然有这些转储,没有任何编码信息需要处理。虽然我知道他们都是UTF-8。

最佳答案

考虑将您的 ruby​​ 升级到最新的 1.9.2。

我在 1.9.1 中发现了这个错误,但在 1.9.2 中没有。

关于Ruby 1.9、YAML 和字符串编码 : how to lead a life of sanity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1989348/

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