37 votes

UnicodeEncodeError: le codec 'ascii' ne peut pas coder de caractère

Lorsque le téléchargement de fichiers avec des caractères non-ASCII-je obtenir UnicodeEncodeError:

Exception Type: UnicodeEncodeError at /admin/studio/newsitem/add/
Exception Value: 'ascii' codec can't encode character u'\xf8' in position 78: ordinal not in range(128)

Voir plein de trace de pile.

- Je exécuter Django 1.2 avec MySQL et nginx et FastCGI.

C'est un problème qui est fixé selon le Django Trac de base de données, mais j'ai toujours le problème. Toutes les suggestions sur la façon de fix sont les bienvenus.

EDIT: Ceci est mon champ de l'image:

image = models.ImageField(_('image'), upload_to='uploads/images', max_length=100)

41voto

akaihola Points 10007

Pour toute personne rencontrant ce problème lors de l'exécution de Django avec Supervisor , la solution consiste à ajouter, par exemple, les éléments suivants à la section supervisord de la configuration de Supervisor:

 environment=LANG="en_US.utf8", LC_ALL="en_US.UTF-8", LC_LANG="en_US.UTF-8"
 

Cela a résolu le problème pour moi dans Supervisor 3.0a8 sous Debian Squeeze.

24voto

Lincoln B Points 1214

Dans les situations où vous devez afficher une chaîne unicode dans un endroit qui accepte uniquement ascii (comme la console ou en tant que chemin d'accès), vous devez dire à Python que vous souhaitez remplacer les caractères non ascii meilleur effort.

>> problem_str = u'This is not all ascii\xf8 man'
>> safe_str = problem_str.encode('ascii', 'ignore')
>> safe_str
'This is not all ascii man'

Problèmes d'encodage sont empêchés dans l'admin par la prudence de la remise de Django template, mais si vous avez déjà ajouté des colonnes personnalisées et oublié de convertir les valeurs ascii, ou vous remplacer le str méthode pour un modèle et d'oublier pour ce faire, vous obtiendrez la même erreur, la prévention de modèle de rendu.

Si cette chaîne ont été enregistrées dans le (espérons-le, utf8) de la base de données il n'y aurait pas de problème, il semble que vous essayez de charger un fichier qui utilise le titre d'une entité qui a un caractère ascii.

14voto

J'espère que cela aiderait. Dans mon cas, je cours django à travers daemontools.

Réglage

 export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
 

dans le script d'exécution avant d'exécuter manage.py a résolu le problème de téléchargement du nom de fichier

12voto

vorpyg Points 894

Après avoir enquêté davantage sur cette question, j'ai découvert que je n'avais pas défini le jeu de caractères dans mon fichier de configuration principal Nginx:

 http {
  charset  utf-8;
}
 

En ajoutant ce qui précède, le problème a disparu et je pense que c'est la bonne façon de traiter ce problème.

4voto

Mark Lavin Points 12740

C'est difficile à dire sans voir un peu plus de code, mais il semble être lié à cette question: UnicodeDecodeError sur la tentative pour enregistrer un fichier par le biais de django par défaut filebased backend.

En regardant à travers le Django billet mentionné, il semblerait que vous devez suivre à quelque chose de similaire pour le déploiement de docs sur "Si vous obtenez un UnicodeEncodeError":
https://docs.djangoproject.com/en/1.4/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror

(Je sais que c'est pour Apache/mod_python, mais j'imagine que c'est la même racine que le problème de système de fichiers d'encodage de ne pas être en UTF-8 et il y a un correctif similaire lors de l'utilisation de nginx)

EDIT: De ce que je peux dire à ce nginx module serait l'équivalent corrigé: http://wiki.nginx.org/NginxHttpCharsetModule

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