方法force_encoding中是否有不修改调用方对象的版本?
所以,当前的force_编码工作方式如下:

> 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/

10-12 17:16