Python + request + unittest learning (1) - Razones y soluciones para errores ilegibles (problema UTF-8 BOM) en la lectura de texto

Fenómeno

Al leer el texto, a menudo habrá una serie de errores.
Ejemplo 1: Nuo Condado, de hecho, el comienzo del texto es H, http se muestra como Nuo Condado ttp
Ejemplo 2: Nuo costura, de hecho, el comienzo del texto es P, pública se muestra como Nuo ulic costura
, siempre y cuando la primera letra del texto para el Nuo pertenecen Este tipo de error se encontrará durante el uso de Python, Java, PHP, etc. Este tipo de error no tiene nada que ver con el lenguaje. La causa del error es UTF-8 BOM.
Razón

BOM es Byte Order Mark, que es la firma Unicode de los documentos UTF-8, es decir, los tres bytes de EF BB BF. Cuando la codificación del archivo se selecciona como UTF-8, el sistema agregará automáticamente los tres EF BB BF en el encabezado del archivo Bytes, y cuando se selecciona UTF-8 NO BOM, estos tres bytes se eliminarán automáticamente.
BOM es opcional y puede usarse para detectar si un flujo de bytes está codificado en UTF-8. Microsoft hace esta prueba, pero algunos softwares no hacen esta prueba y la tratan como un carácter normal.
Microsoft agregó tres bytes de EF BB BF frente a su propio archivo de texto en formato UTF-8. Los programas como el bloc de notas en Windows se basan en estos tres bytes para determinar si un archivo de texto es ASCII o UTF-8. Sin embargo, esto es solo una señal secreta hecha por Microsoft. No existe tal marca en los archivos de texto UTF-8 en otras plataformas.
Solución

1. Intente usar notepad ++, sublime, editplus y otros editores de texto que no agreguen directamente BOM
2. Use un editor binario como ultraedit para eliminar la BOM
3. Use el editor en 1 para volver a abrir el documento y guárdelo como UTF-8 sin BOM Codificación
4. Establezca la codificación en ASCII, por supuesto, esto también es un gran problema en chino
5. Elimine BOM con Python

 

import codecs 

data = open ("Test.txt"). read () 
if data [: 3] == codecs.BOM_UTF8: 
     data = data [3:] 
print data.decode ("utf-8")

  

 


Enlace original: https://blog.csdn.net/mighty13/java/article/details/78077867

Supongo que te gusta

Origin www.cnblogs.com/zhaocbbb/p/12676366.html
Recomendado
Clasificación