非破坏力force_encoding?

fot*_*nus 2 ruby encoding

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

所以,当前的force_encoding是这样的:

> a
 => "Ü" 
> a.force_encoding("BINARY")
 => "\xC3\x9C" 
> a
 => "\xC3\x9C" 
Run Code Online (Sandbox Code Playgroud)

我希望结果是这样的:

> a
 => "Ü" 
> a.force_encoding_non_destructive("BINARY")
 => "\xC3\x9C" 
> a
 => "Ü" 
Run Code Online (Sandbox Code Playgroud)

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

a="a"
a.freeze
a.force_encoding("BINARY")
# raises error
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 5

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"]
Run Code Online (Sandbox Code Playgroud)

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

a.dup.force_encoding("BINARY")
Run Code Online (Sandbox Code Playgroud)