为什么编码没有改变?

Why doesn't the encoding change?

我从页面获取信息,但它的编码方式不适合我:

response = session.post(
    url=uri,
    headers={
        'Accept-Charset': 'utf-8'
    }
)

error_message = re.search(r'b-content__red\"\>(.+?)\<', response.text)

正文:

&#x41E;&#x431;&#x440;&#x430;&#x442;&#x438;&#x442;&#x435;&#x441;&#x44C; &#x432; &#x441;&#x43B;&#x443;&#x436;&#x431;&#x443; &#x43F;&#x43E;&#x434;&#x434;&#x435;&#x440;&#x436;&#x43A;&#x438; &#x432;&#x430;&#x448;&#x435;&#x433;&#x43E; &#x431;&#x430;&#x43D;&#x43A;&#x430;.

然后我尝试转换它:

import cchardet


if error_message:
    error_message = error_message.group(1).encode()
    encoding = cchardet.detect(error_message)['encoding']

    if 'UTF-8' != encoding.upper():
        error_message = error_message.decode('utf-8')

但是结果还是一样。我做错了什么?

您需要的是内置 html 模块。

import html
response = session.post(
    url=uri,
    headers={
        'Accept-Charset': 'utf-8'
    }
)

error_message = re.search(r'b-content__red\"\>(.+?)\<', response.text)
if error_message:
    error_message = html.unescape(error_message.group(1))
    print(error_message)

您的方法存在的问题是 .encode() 需要一个有效的字符串 'Обратитесь в службу поддержки вашего банка'.encode().decode() 需要一个有效的 python 字节串。 b'\xd0\x9e\xd0\xb1\xd1\x80\xd0\xb0\xd1\x82\xd0\xb8\xd1\x82\xd0\xb5\xd1\x81\xd1\x8c'.decode('utf8')

幸运的是,python 提供了一种简单的方法来解析 html 个实体。