我在ruby中遇到了一个奇怪的问题:用不间断的空格来膨胀和收缩字符串。
具有规则空格的字符串的行为符合预期:

str = "hello world"; str_zipped = Zlib.deflate str; str == Zlib.inflate(str_zipped)
=> true

然而,
str = "hello\xA0world"; str_zipped = Zlib.deflate str; str == Zlib.inflate(str_zipped)
=> false

这是预期的行为还是错误?

最佳答案

zlib不保留编码。您的字符串可能是utf-8编码的:

str = "hello\xA0world"
str.encoding
#=> <Encoding:UTF-8>

但是zlib返回一个acsii编码的字符串:
str_zipped = Zlib.deflate str
str = Zlib.inflate(str_zipped)
str.encoding
#=> <Encoding:ASCII-8BIT>

但是当你修正编码时:
str = "hello\xA0world"
str_zipped = Zlib.deflate str
str_utf8 = Zlib.inflate(str_zipped).force_encoding('UTF-8')
str == str_utf8
#=> true

关于ruby - Zlib具有不间断的空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38226416/

10-13 08:57