2012-07-10 109 views
0

是否可以在字符串上獲得舊的Ruby 1.8行爲,並將其作爲字節流而不是編碼字符串處理?使用Ruby 1.9字符串作爲字節流而不是編碼字符串

特別是,我試圖得到一個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,沒有運氣。

回答

1

只要做string = string.force_encoding("ASCII-8BIT")任何字符串,你想作爲一個普通的老字節系列。那麼你應該可以將兩個字符串加在一起。

我認爲.force_encoding("BINARY")也可能工作。

+0

這似乎並不很合作。我用我試圖測試的實際代碼修改了帖子。 – user1510597 2012-07-10 20:38:31

+0

請發佈完整的堆棧跟蹤。我懷疑你的錯誤來自於Zlib :: crc32,但我不能說。如果它來自Zlib,那麼你應該問一個關於如何修復Zlib的新問題。 – 2012-07-10 20:45:44

+0

您的編輯完全改變了問題的性質。我認爲這是一個關於添加兩個字符串的問題,現在事實證明你正在調用一些(第三方?)庫。 – 2012-07-10 20:47:01

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> 
相關問題