4 votes

Python UnicodeEncodeError: le codec 'ascii' ne peut pas encoder le caractère à la position 0: l'ordinal n'est pas dans la plage (128)

En Python 2.7, voir l'erreur suivante, lors de la tentative de conversion de type pour s'assurer qu'il correspond au schéma de sortie.

UnicodeEncodeError: le codec 'ascii' ne peut pas encoder le caractère à la position 0: ordinal not in range(128) J'ai cherché pourquoi et j'ai reproduit l'erreur dans Jupiter. En tapant simplement.

str(u'\u2013')

Quelle est la manière de convertir le type en chaîne qui peut gérer ce type d'erreur ? Merci !

12voto

akhilsp Points 619

Essayez ceci :

u'\u2013'.encode('utf-8')

6voto

Bin Points 859

Je vais répondre à ma propre question. J'ai trouvé une question dupliquée. stackoverflow.com/questions/9942594/

Mais pour la simplicité, voici une solution élégante qui fonctionne bien avec mon cas d'utilisation:

def safe_str(obj):
    try: return str(obj)
    except UnicodeEncodeError:
        return obj.encode('ascii', 'ignore').decode('ascii')
    return ""

safe_str(u'\u2013')

Ou simplement utilisez:

u'\u2013'.encode('ascii', 'ignore')

2voto

Ashish Bainade Points 84

Pour la version 2.7.x, l'encodage n'est pas défini par défaut. Veuillez utiliser le code ci-dessous comme première ligne du programme

# -*- coding: utf-8 -*-
# Votre code se trouve en dessous de cette ligne

Cela devrait résoudre votre problème.

Pour Python 3.x, il y a un encodage par défaut, donc il n'y aura pas de problème d'encodage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X