0

我有一堆字符串,它们是看起来像这样的句子:

Having two illnesses at the same time is known as \xe2\x80\x9ccomorbidity\xe2\x80\x9d and it can make treating each disorder more difficult.

.encode()我用python的bz2库对原始字符串进行了编码,然后进行了压缩。

然后我解压bz2.decompress()并用来.decode()取回它。

有什么想法可以方便地从文本中删除这些字节串或避免引号之类的字符无法正确解码吗?

谢谢!

4

2 回答 2

1

在我看来,您实际上并没有正确解码数据,因为解释\xe2\x80\x9ccomorbidity\xe2\x80\x9d为字节并且解码会产生一个非常明智的字符串:

>>> b"\xe2\x80\x9ccomorbidity\xe2\x80\x9d"
b'\xe2\x80\x9ccomorbidity\xe2\x80\x9d'
>>> _.decode()
'“comorbidity”'

要么是原始数据,要么是最初不正确地生成/解码(在将其编码为 UTF-8 并压缩之前),例如 UTF8 数据源被读取为 ISO-8859-1(本质上是一个直通)。

所以这些是我要看的部分:

  • 解压后你真的正确解码了吗
  • 原始数据是否正确
于 2020-01-28T13:40:51.820 回答
1

我猜你错误地将上面的字节字符串“句子”分配给了一个类型为 的对象str。相反,它需要分配给字节字符串对象并将其解释为 UTF-8 字节序列。比较:

b = b'... known as \xe2\x80\x9ccomorbidity\xe2\x80\x9d and ...'
s = b.decode('utf-8')
print(b)
# b'... known as \xe2\x80\x9ccomorbidity\xe2\x80\x9d and ...'
print(s)
# ... known as “comorbidity” and ...

无论哪种方式,问题都与压缩无关:无损压缩(例如 bzip2)往返永远不会更改数据:

print(bz2.decompress(bz2.compress(b)).decode('utf-8'))
# ... known as “comorbidity” and ...
于 2020-01-28T13:42:41.243 回答