ruby 中的 Zlib 和 utf-8

Jef*_*nte 5 ruby unicode zlib utf-8

我正在尝试使用 zlib 来压缩一些冗长的字符串,其中一些可能包含 unicode 字符。目前,我正在用 ruby​​ 做这件事,但我认为这真的适用于任何语言。这是超级基本的实现:

require 'zlib'

example = "“hello world”" # note the unicode quotes
compressed = Zlib.deflate(example)
puts Zlib.inflate(compressed)
Run Code Online (Sandbox Code Playgroud)

这里的问题是文本是这样出现的:

\xE2\x80\x9Chello world\xE2\x80\x9
Run Code Online (Sandbox Code Playgroud)

...没有unicode引号,只有奇怪的无法识别的字符。有谁知道可以在保留 unicode 字符的同时使用 Zlib 的方法?红宝石答案的奖励积分:)

Cas*_*per 5

似乎 ZlibASCII-8BIT在膨胀时作为默认编码生成。要修复它,只需强制使用原始编码:

require 'zlib'

input = "“hello world”" 
compressed = Zlib.deflate(input)
output = Zlib.inflate(compressed).force_encoding(input.encoding)
Run Code Online (Sandbox Code Playgroud)

或者手动设置编码:

output = Zlib.inflate(compressed).force_encoding('utf-8')
Run Code Online (Sandbox Code Playgroud)