0

文字列に対して古い Ruby 1.8 の動作を取得し、エンコードされた文字列ではなくバイトのストリームとして処理することは可能ですか?

特に、ユニコードでエンコードされた文字列と組み合わせて数バイトを取得しようとしているので、次のようになります。

\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")普通の古い一連のバイトとして扱いたい文字列に対して行うだけです。次に、2 つの文字列を一緒に追加できるはずです。

.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 に答える