Algumas soluções para o problema confuso

Nos últimos dias, aprendi mais sobre a transcodificação do sistema e escreverei um pouco mais.

No PYTHON, todo o texto na tela é texto UNICODE e o sistema só reconhece texto UNICODE. A codificação padrão do Python para leitura de arquivos é UTF-8.
A codificação padrão do bucket da família de escritório é GBK. (Na China) A
codificação padrão do Windows é GBK.

O menor código é GB2312, depois GBK, e o maior é BIG-5.

Quando o sistema lê textos com outras taxas de código, 100% chinês relatará um erro e alguns códigos em inglês não estarão errados.


Para salvar o texto da tela em um arquivo com outras taxas de código, é necessário codificar. Se você ler o conteúdo de outras taxas de código do arquivo, será necessário decodificá-lo.

Em outras palavras, codificar é compactação e decodificar é descompactar.

Codificações comuns incluem UNICODE para exibição na tela, UTF-8, chinês GB2312 e extensões chinesas GBK e BIG5.
UTF-8 suporta chinês e emoticons (como rostos sorridentes).

Quando UTF-8 é convertido para o formato GBK, o emoji reporta um erro.

UTF8 no banco de dados mysql não é UTF-8 regular, UTF8 tem três bytes e UTF-8 tem quatro bytes. mysql corresponde a UTF8mb4.

Quando PYTHON encontra uma taxa de bits não reconhecida, ele reporta um erro.

UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence

Se nem tudo puder ser decodificado, um erro será relatado: várias strings não podem ser decodificadas. Incapaz de decodificar bytes.
Este tipo de erro irá saltar para fora do corpo do programa diretamente, é um erro em vez de advertir.

Se for um pequeno número de erros, você pode escrever:

 file=open(root_log,'w',encoding='gb2312'errors='replace')

Esse conteúdo distorcido será exibido? ? ? ? ? ? ?

Este é o texto que converti do formato UTF-8 para o formato GBK, substituindo.

你好:? ? ? ? 姓名:赵林 ? ? ? ?emos账号:zhaolin? ? ? ? 青岛市移动公司 ? ?网络部 ? ?网优中心? ? ? ? ? 登录这个系统:http://10.24.170:7090/drp/? ? ? ? 登录维修物料账套? ? ? ? 我应该是新增账户,之前没有账号。? ? ? ? 删除青岛网优中心weiyi账号。[email protected]?使用O
dica: Obviamente, a codificação UTF-8 é maior do que o conjunto de caracteres da codificação GBK ...

Se você usar IGNORE, vários caracteres ilegíveis serão exibidos. Como estrelas da flor da ameixa e assim por diante.

Se você quiser reconhecer texto com taxas de bits diferentes, geralmente uso try ... exceto ...

try:
    f=open('XXXXX','r',encoding='utf-8')
except:
    f=open('XXXXX','r',encoding='GBk',errors='replace')

Se não funcionar, escreva mais alguns julgamentos ... Normalmente, há mais GBK e UTF-8.

A decodificação padrão do ambiente PYTHON é UTF-8 e o ambiente padrão do WINDOWS da China é GBK (ou GB2312). Portanto, a decodificação padrão é necessária no ambiente de escrita à mão.

Em outras palavras: se você escrever um programa PYTHON com f = open (XXXX), uma codificação = "UTF-8" será escrita por padrão.
Você pode escrever uma linha de comentário padrão antes do arquivo:

- - modo: python; codificação: utf-8 - -

Por padrão, a string str em python é decodificação UNICODE e o tipo é decodificação TYPES.

Existem dois tipos de decodificação para e-mail por padrão: decodificação UTF-8 e GB2312. Isso depende do humor da caixa de correio ... a
Insira a descrição da imagem aqui
caixa de correio irá especificar o formato do arquivo a ser decodificado.

Ao importar dados para o banco de dados, você deve primeiro identificar o código antes de importar, caso contrário, um erro será relatado.
O Navicat tem a capacidade de reconhecer automaticamente a codificação do arquivo, e o UES também tem. Se você não quiser instalá-lo, o leitor TXT padrão no sistema (o que está abaixo) está bom.

Insira a descrição da imagem aqui

dbeaver não tem a capacidade de decodificar automaticamente, então você deve codificá-lo manualmente.
Claro, acho que dbeaver é fácil de usar ...

O PYTHON tem um chardet de software que reconhece códigos, mas é um pouco lento para reclamar ...
Então ficará truncado ao reconhecer text / html (acho que é uma taxa de código diferente), encontrei um código online para resolver isso ( não tentei)

import re
from html import unescape
 
def html_to_plain_text(html):
    text = re.sub('<head.*?>.*?</head>', '', html, flags=re.M | re.S | re.I)
    text = re.sub('<a\s.*?>', ' HYPERLINK ', text, flags=re.M | re.S | re.I)
    text = re.sub('<.*?>', '', text, flags=re.M | re.S)
    text = re.sub(r'(\s*\n)+', '\n', text, flags=re.M | re.S)
    return unescape(text)

O efeito é muito bom, mas não entendo ...

Provavelmente o conteúdo é como acima.

Acho que você gosta

Origin blog.csdn.net/weixin_45642669/article/details/112916263
Recomendado
Clasificación