【问题标题】:How to convert messed up string to plain text [duplicate]如何将混乱的字符串转换为纯文本[重复]
【发布时间】:2021-06-17 22:29:21
【问题描述】:

我正在使用 python3 接收和处理来自电报频道的文本消息。我有时会收到包含如下字符串的消息:

Ехchanges: Віnance Futures

看起来很正常。但是当我想检查时

if 'Exchanges' in the_string:

我明白了

False

试图追踪这个:

the_string.encode()

产量

b'\xd0\x95\xd1\x85changes: \xd0\x92\xd1\x96nance Futures'

如何将其转换为普通字符串?

'Exchanges: Binance Futures'

【问题讨论】:

  • 在您的示例中,第一个字符似乎是 U+0415 Cyrillic Capital Letter Ie。它看起来与 ASCII 字符 E 相同,但视觉上的相似性是一个红鲱鱼,你不应该期望 Python 仅仅因为它们看起来相同就将它们视为彼此相同。
  • @water_ghosts 这是有道理的。然后我将使用 not - russian 字符串作为 if 条件。您可以将此添加为答案,我将其标记为已解决
  • 顺便说一句,您可以使用ascii(),而不是使用编码进行分析,它显示字符而不是字节:print(ascii(the_string)) -> '\u0415\u0445changes: \u0412\u0456nance Futures'

标签: python unicode


【解决方案1】:

它是utf-8 编码字符串。您需要在这里使用字符串解码器decode('utf-8')

解决方案:

encoded_string = b'\xd0\x95\xd1\x85changes: \xd0\x92\xd1\x96nance Futures'
decoded_string = encoded_string.decode("utf-8")
print(decoded_string)

【讨论】:

  • 没有做它应该做的......字符串看起来是正确的,是的。但是 if 条件仍然是 False。
  • the_string 是一个字符串。 OP 只尝试对其进行编码以查看底层字符是什么。
  • 另外,从技术上讲,您说的是bytes 对象,而不是str
【解决方案2】:

尝试混合使用 str 类的 encode() 和 decode() 方法:

>>> my_string = 'Ехchanges: Віnance Futures'
>>> 'Ехchanges' in my_string
True
>>> my_string.encode()
b'\xd0\x95\xd1\x85changes: \xd0\x92\xd1\x96nance Futures'
>>> 'Ехchanges' in my_string.encode().decode()
True
>>> 

【讨论】:

  • 不起作用。 Ехchanges: Віnance Futures 这是原始字符串。我只是在上面的示例中正常编写它。字节表示是正确的。如果我先编码然后再解码,我会得到一个看起来正确的字符串,但在 if 条件下仍然是 False。
  • 'Ехchanges' in my_string -> True???您错过了问题的全部要点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 2012-11-27
相关资源
最近更新 更多