0

是否可以在字符串上获得旧的 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,但没有成功。

4

2 回答 2

1

只需string = string.force_encoding("ASCII-8BIT")对您想要视为普通旧字节系列的任何字符串执行操作即可。然后你应该能够将两个字符串加在一起。

我觉得.force_encoding("BINARY")也可以。

于 2012-07-10T20:28:50.457 回答
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>
于 2012-07-10T21:30:31.403 回答