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.
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'
Même sans appel explicite à Unicode(), des conversions de str en Unicode peuvent se produire. Les situations suivantes peuvent déclencher des exceptions UnicodeDecodeError :
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 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!