是否可以在字符串上获取旧的Ruby 1.8行为,并将其作为字节流而不是编码字符串使用?
特别是,我试图将一些字节与Unicode编码的字符串结合起来,所以:
\xFF\x00\x01#{Unicode encoded string}
但是,如果我尝试这样做,它也会尝试编码\ xFF \ x00 \ x01,这将无效。
代码
我正在尝试用irb做什么:
"#{[4278190080].pack("V").force_encoding("BINARY")}\xFF".force_encoding("BINARY")
这给了我:
Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8
from (irb):41
from /usr/bin/irb:12:in `<main>'
我也尝试过使用ASCII-8BIT而没有运气。
答案 0 :(得分:1)
只需将string = string.force_encoding("ASCII-8BIT")
添加到您想要视为普通旧字节系列的任何字符串。然后你应该能够将两个字符串加在一起。
我认为.force_encoding("BINARY")
也可能有用。
答案 1 :(得分:0)
默认情况下,您插入的字符串文字为UTF-8。我认为Encoding::CompatibilityError
是由在UTF-8字符串中插入BINARY编码的字符串引起的。
尝试使用兼容编码连接字符串,例如:
irb> s = [4278190080].pack("V") + "\xFF".force_encoding("BINARY")
=> "\x00\x00\x00\xFF\xFF"
irb>> s.encoding
=> #<Encoding:ASCII-8BIT>
irb> s=[4278190080].pack("V") + [0xFF].pack("C")
=> "\x00\x00\x00\xFF\xFF"
irb> s.encoding
=> #<Encoding:ASCII-8BIT>