Causas y soluciones para UnicodeDecodeError [Python]

2019/6/5

Cuando intenté leer un conjunto de datos en formato de archivo csv con pandas, inmediatamente encontré el error "UnicodeDecodeError: codec 'utf-8' no puede decodificar el byte 0x91 en la posición 1: byte de inicio no válido". Tome nota.

contenido del error

Lea el archivo csv con pd.read_csv.Luego ...

importar pandas como pd df = pd.read_csv ('data.csv')

>> UnicodedeCodeError: el códec 'utf-8' no puede decodificar el byte 0x91 en la posición 1: byte de inicio no válido

Obtuve un error de decodificación Unicode (convertir un código de carácter en un carácter).
Por cierto, la conversión de caracteres en códigos de caracteres se denomina codificación.

Porque

Dentro de la computadora personal, los caracteres no se reconocen como son, sino que se tratan como números (códigos de caracteres) asignados a cada carácter por adelantado.

Hay muchos tipos de códigos de caracteres según el idioma y cómo asignar números. UTF-8 es uno de los métodos de codificación para Unicode establecido como estándar unificado del estándar mundial para que pueda usarse en cualquier idioma.
Sin embargo, UTF-8 tampoco parece ser perfecto (Wikipedia:Problemas de Unicode en el entorno japonés)

No sé el carácter que causó el problema, pero dado que el archivo csv contenía caracteres japoneses, la mala conversión entre el código de caracteres japoneses y UTF-8 causó el error de decodificación Unicode. Parece que sí.

解決 策

Al leer con read_csv (), especifique el formato de codificación desde el argumento hasta el código de caracteres japoneses (shift_jis, etc.).

df = pd.read_csv ('data.csv', encoding = 'shift_jis')

Pude leerlo con éxito.

Otros formatos de codificaciones compatibles con japonés

Por cierto, hay varios códigos de caracteres que pueden expresar japonés y Python implementa lo siguiente como estándar. (Referencia:Lista de codificaciones estándar de Python )

  • cp932
  • euc_jp, euc_jis_2004, euc_jisx0213
  • iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
  • iso2022_jp_2004, iso2022_jp_2ext
  • shift_jis, shift_jis _2004, shift_jisx0213

Sin embargo, tengo la impresión de que se puede leer bien con shift_jis o cp932, que es una medida importante.