2013-11-23 23 views
2

我試圖使用zlib壓縮一些冗長的字符串,其中一些可能包含unicode字符。目前,我正在用ruby做這件事,但我認爲這真的適用於任何語言。這裏的超基本實現:Zlib和utf-8在ruby中

​​

這裏的問題是,文本出來,因爲這:

\xE2\x80\x9Chello world\xE2\x80\x9 

...沒有Unicode編碼,只是奇怪無法識別的字符。有誰知道Zlib可以在保留unicode字符的同時使用嗎?在紅寶石答案紅利點:)

+0

你使用哪種版本的紅寶石?我用'ruby-2.0.1/zliby0.0.5'測試過,一切正常。 – mudasobwa

回答

2

看來Zlib產生ASCII-8BIT作爲默認編碼時膨脹。要修復它只是迫使原始編碼:

require 'zlib' 

input = "「hello world」" 
compressed = Zlib.deflate(input) 
output = Zlib.inflate(compressed).force_encoding(input.encoding) 

或手動設置編碼:

output = Zlib.inflate(compressed).force_encoding('utf-8') 
+0

你是一個紳士和學者。這工作完美。非常感謝! –