Utilice el juego de caracteres para juzgar la codificación de cadenas en Python

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)


Supongo que te gusta

Origin blog.51cto.com/14900374/2667916
Recomendado
Clasificación