2017-07-21 3 views
2

J'essaye d'exécuter un script CGI python qui a des chaînes Unicode. Il fonctionne très bien dans la console, mais quand je le lance dans le navigateur, il donne error- suivantComment imprimer des caractères Unicode dans Python 3 CGI?

UnicodeEncodeError: 'ascii' codec can't encode character '\u2026' in position 198: ordinal not in range(128)

J'ai essayé ces deux -
encode('ascii','ignore') unicodedata.normalize('NFKD',var).encode('ascii', 'ignore').strip()
var est la variable qui contient la chaîne unicode.

Maintenant comment est-ce que j'imprime Unicode ou ascii sans erreur dans le navigateur?

Répondre

1

Lorsque Python imprime des chaînes Unicode sur la console, il détecte généralement le codage de la console et encode automatiquement les chaînes Unicode à l'aide de ce codage. Pour CGI, il n'y a pas de terminal donc la valeur par défaut est ascii. Vous pouvez modifier stdout à un autre en utilisant le codage:

import codecs 
sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer) 

Vous pouvez utiliser une ligne similaire pour stderr aussi bien.