a.force_encoding("BINAR-6ren">
gpt4 book ai didi

ruby - 非破坏性force_encoding?

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

force_encoding 方法是否有不修改调用者对象的版本?

因此,当前的 force_encoding 是这样工作的:

> a
=> "Ü"
> a.force_encoding("BINARY")
=> "\xC3\x9C"
> a
=> "\xC3\x9C"

我希望结果是这样的:

> a
=> "Ü"
> a.force_encoding_non_destructive("BINARY")
=> "\xC3\x9C"
> a
=> "Ü"

请注意,我完全理解 a.force_encoding("UTF-16LE").force_encoding("UTF-8") 产生相同的结果(假设 a当然,以前是 UTF-8)并且字符串中的字节没有被修改。但是,字符串状态被修改了,因此这种方法是破坏性的。例如:

a="a"
a.freeze
a.force_encoding("BINARY")
# raises error

最佳答案

force_encoding 在不改变接收方字节方面是非破坏性的。它只是改变了字节的解释方式,即它改变了字符串的字符:

a = "Ü"
a.bytes.to_a #=> [195, 156]
a.chars.to_a #=> ["Ü"]

a.force_encoding("BINARY")
a.bytes.to_a #=> [195, 156]
a.chars.to_a #=> ["\xC3", "\x9C"]

编码存储在字符串实例中。要获得“二进制”编码的副本,请使用:

a.dup.force_encoding("BINARY")

关于ruby - 非破坏性force_encoding?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17024244/

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