Maison >développement back-end >Tutoriel Python >Comment résoudre l'erreur UnicodeDecodeError : le codec 'ascii' ne peut pas décoder l'octet en Python 2.x ?

Comment résoudre l'erreur UnicodeDecodeError : le codec 'ascii' ne peut pas décoder l'octet en Python 2.x ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-21 03:01:091024parcourir

How to Solve the UnicodeDecodeError: 'ascii' codec can't decode byte in Python 2.x?

UnicodeDecodeError : le codec 'ascii' ne peut pas décoder l'octet

Face à l'UnicodeDecodeError : le codec 'ascii' ne peut pas décoder l'octet dans Python 2.x indique une tentative pour convertir une chaîne Python 2.x contenant des caractères non-ASCII en chaîne Unicode sans spécifier le encodage de la chaîne d'origine.

Unicode Zen dans Python 2.x

Les chaînes Unicode, distinctes des chaînes, contiennent des codes de points Unicode et peuvent représenter n'importe quel point Unicode à travers le spectre. Les chaînes, en revanche, contiennent du texte codé comme UTF-8, UTF-16 ou ISO-8895-1. Les chaînes sont décodées en Unicode et vice versa. Les fichiers et les données texte sont toujours transférés dans des chaînes codées.

Le module Markdown utilise unicode() pour valider les chaînes entrantes, garantissant qu'il s'agit soit de chaînes ASCII, soit de chaînes Unicode réemballées. Étant donné que les auteurs de Markdown ne peuvent pas déterminer l'encodage de la chaîne entrante, ils comptent sur les utilisateurs pour décoder les chaînes en Unicode avant de les transmettre.

Les chaînes Unicode peuvent être déclarées dans le code en utilisant le préfixe « u » avant le chaîne. Par exemple :

my_u = u'my ünicôdé strįng'

Gotchas

Même sans appel explicite à Unicode(), des conversions de str en Unicode peuvent se produire. Les situations suivantes peuvent déclencher des exceptions UnicodeDecodeError :

  • Conversion explicite sans encodage : unicode('€')
  • Utilisation de nouvelles chaînes de format de style avec des chaînes Unicode : u"La devise est : { }".format('€')
  • Utilisation de chaînes de format ancien avec des chaînes Unicode : u'La devise est : %s' % '€'
  • Ajout de chaînes à Unicode : u'La devise est : ' '€'

Saisie et décodage

Source Code : Les caractères non-ASCII peuvent être inclus dans le code source à l'aide de chaînes Unicode avec le préfixe « u ». Pour permettre à Python de décoder correctement le code source, un en-tête de codage correct doit être inclus. Pour les fichiers UTF-8, utilisez :

# encoding: utf-8

Fichiers : Utilisez io.open avec le bon encodage pour décoder les fichiers à la volée. Par exemple, pour un fichier UTF-8 :

import io
with io.open("my_utf8_file.txt", "r", encoding="utf-8") as my_file:
  my_unicode_string = my_file.read()

Bases de données : Configurez les bases de données pour renvoyer des chaînes Unicode et utiliser des chaînes Unicode pour les requêtes SQL.

HTTP : Les pages Web peuvent avoir différents encodages. Python-Requests renvoie Unicode dans réponse.text.

Manuellement : Décodez les chaînes manuellement à l'aide de my_string.decode(encoding), où encoding est l'encodage approprié.

Python 3

Python 3 gère Unicode légèrement différemment de Python 2.x. La chaîne normale est désormais une chaîne Unicode et l'ancienne chaîne est désormais constituée d'octets.

Dans Python 3, l'encodage par défaut est UTF-8, donc le décodage d'une chaîne d'octets sans spécifier d'encodage utilise UTF-8. De plus, open() fonctionne en mode texte par défaut, renvoyant des str décodées (chaînes Unicode).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn