antecedentes
La codificación de cadenas en Python puede ser un dolor de cabeza. En el desarrollo web, la cadena ingresada por el usuario se transmite directamente a través de la interfaz, si es algún carácter extraño, puede involucrar la conversión del códec Python. Python mismo proporciona la conversión entre str y bytes, que se pueden convertir a través de las funciones encode () y decode (), pero el punto más problemático es que primero necesitamos conocer el método de codificación, y luego podemos saber cómo codificar y decodificarlo. Después de buscar en Internet, descubrí que Python tiene una biblioteca de juegos de caracteres, que se especializa en este tipo de misterio de codificación.
Introducción
Dirección del proyecto: https://github.com/chardet/chardet
Soporte para detección de juegos de caracteres
- ASCII, UTF-8, UTF-16 (2 variantes), UTF-32 (4 variantes)
- Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (chino tradicional y simplificado)
- EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (japonés)
- EUC-KR, ISO-2022-KR, Johab (coreano)
- KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (cirílico)
- ISO-8859-5, windows-1251 (búlgaro)
- ISO-8859-1, windows-1252 (idiomas de Europa occidental)
- ISO-8859-7, windows-1253 (griego)
- ISO-8859-8, windows-1255 (hebreo visual y lógico)
- TIS-620 (tailandés)
Versión requerida: Python 3.6+. (De hecho, Python2.7 también es posible)
instalación
sudo pip3 instalar chardet
usar
1. Línea de comando
chardetect somefile someotherfile
ejemplo:
chardetect get-pip.py tune.sh
La figura anterior detecta la codificación de los dos archivos y su probabilidad de predicción (confianza): 99% y 100%
2. módulo de Python
1) Utilice chardet.detect para detectar el tipo de codificación
import urllib rawdata = urllib.urlopen ('http://yahoo.co.jp/') .read () import chardet # 检测 rawdata 类型 chardet.detect (rawdata)
2) Utilice Universaldetector para detectar la codificación de archivos grandes (modo no codicioso)
#coding: utf8 import urllib from chardet.universaldetector import UniversalDetector usock = urllib.urlopen ('http://yahoo.co.jp/') #Generate UniversalDetector object detector = UniversalDetector () # Recorre cada línea del archivo por línea in usock .readlines (): #alimenta la línea que se lee actualmente en el detector, detectará la codificación por sí misma detector.feed (línea) #Cuando el detector reciba suficientes líneas y pueda adivinar la codificación, se establecerá detector.done a Verdadero si detector.done: break #close () es para evitar que el detector no tenga suficiente confianza, y finalmente hacer una ronda de cálculos para confirmar la codificación detector.close () usock.close () print (detector.result)
El resultado de impresión final: {'confianza': 0,99, 'idioma': '', 'codificación': 'utf-8'}
3) Utilice Universaldetector para detectar la codificación de varios archivos grandes (modo no codicioso)
#coding: utf8 import glob from chardet.universaldetector import UniversalDetector detector = UniversalDetector () #Recorre todos los archivos grandes que terminan con el sufijo .xml para el nombre de archivo en glob.glob ('*. xml'): print filename.ljust (60) # Use reset () para reiniciar el detector antes de cada ronda de detección detector.reset () para la línea en el archivo (nombre de archivo, 'rb'): detector.feed (línea) si detector.done: break #Después de cada ronda de detección cierre () Detector.close () imprimir detector.result
Lo anterior es el uso de chardet para juzgar el juego de caracteres. ¿Tiene más confianza en el problema del juego de caracteres de Python?
Documento de referencia: https://chardet.readthedocs.io/en/latest/usage.html#example-using-the-detect-function
Portal: últimos datos de prueba de 2021 y principales posiciones de fábrica
Blogger: prueba para ganar dinero (un agricultor de código abierto de prueba que no es 996 sino 996)
Lema: Centrarse en el desarrollo de pruebas y la operación y el mantenimiento automatizados, trabajar duro para leer, pensar y escribir, y tener libertad financiera durante la vida del volumen interno.
Categorías de contenido: mejora tecnológica, charlas diversas en el lugar de trabajo, desarrollo profesional, lectura y escritura, gestión de inversiones y finanzas, vida sana.
csdn: https://blog.csdn.net/ccgshigao
Blog Park: https://www.cnblogs.com/qa-freeroad/
51cto: https://blog.51cto.com/14900374
Cuenta pública de WeChat: prueba para ganar dinero (comparte contenido y recursos exclusivos con regularidad)