Python 如何从字符串中删除解压后留下的ByTestRing?

Python 如何从字符串中删除解压后留下的ByTestRing?,python,bz2,Python,Bz2,我有一堆字符串,它们是类似以下的句子: 同时患有两种疾病被称为\xe2\x80\x9d\xe2\x80\x9d,这会使治疗每种疾病更加困难。 我用.encode()对原始字符串进行编码,然后用python的bz2库进行压缩 然后我用bz2.decompress()解压,并使用.decode()将其取回 有没有办法方便地从文本中删除这些bytestring,或者避免引号之类的字符无法正确解码 谢谢 在我看来,您实际上没有将数据正确解码为将\xe2\x80\x9d\xe2\x80\x9d解释为字节,

我有一堆字符串,它们是类似以下的句子:

同时患有两种疾病被称为\xe2\x80\x9d\xe2\x80\x9d,这会使治疗每种疾病更加困难。

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

然后我用
bz2.decompress()
解压,并使用
.decode()
将其取回

有没有办法方便地从文本中删除这些bytestring,或者避免引号之类的字符无法正确解码


谢谢

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

>>b“\xe2\x80\x9d\xe2\x80\x9d”
b'\xe2\x80\x9d\xe2\x80\x9d'
>>>_u.decode()
“共病”
或者原始数据在第一时间(在编码为UTF-8并压缩之前)生成/解码不当,例如,UTF8数据源被读取为ISO-8859-1(本质上是一个直通)

下面是我要看的部分:

  • 解压后你真的正确解码了吗
  • 原始数据正确吗

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

>>b“\xe2\x80\x9d\xe2\x80\x9d”
b'\xe2\x80\x9d\xe2\x80\x9d'
>>>_u.decode()
“共病”
或者原始数据在第一时间(在编码为UTF-8并压缩之前)生成/解码不当,例如,UTF8数据源被读取为ISO-8859-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 ...

我猜您错误地将上述字节字符串“句子”分配给了
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 ...

是什么让你认为这些字符没有被正确编码?对不起,我想这不是我的意思;我来编辑。他们没有被破译,你能说得更具体些吗?我只是尝试使用
.encode()
对字符串进行编码,然后使用
bz2.compress()
对其进行压缩,然后继续执行
bz2.decompress()
,这已经提供了很好的输出。即使在
.decode()
之后,输出仍然正确。使用Python 3.8.1嘿,伙计们,我得到了一个答案。我在大多数代码中都做得很正确,显然在几个实例中,我只是意外地在bytestring上使用了str()。谢谢你的帮助!是什么让你认为这些字符没有被正确编码?对不起,我想这不是我的意思;我来编辑。他们没有被破译,你能说得更具体些吗?我只是尝试使用
.encode()
对字符串进行编码,然后使用
bz2.compress()
对其进行压缩,然后继续执行
bz2.decompress()
,这已经提供了很好的输出。即使在
.decode()
之后,输出仍然正确。使用Python 3.8.1嘿,伙计们,我得到了一个答案。我在大多数代码中都做得很正确,显然在几个实例中,我只是意外地在bytestring上使用了str()。谢谢你的帮助!谢谢你完全正确。我漏掉了一行,没有解码就在上面使用str()非常感谢!谢谢你完全正确。我漏掉了一行,没有解码就在上面使用str()非常感谢!谢谢另一个答案是第一个,但是这个也可以。谢谢!另一个答案是第一个,但这也可以做到。