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
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.
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.