Python: Comment obtenir StringIO.writelines à accepter chaîne unicode?
Je suis un
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 34: ordinal not in range(128)
sur une chaîne de caractères stockés dans un.desc " ci-dessous, car il contient de l' '£' caractère. Il est stocké dans le sous-jacent Google App Engine banque de données comme une chaîne unicode c'est très bien. Le cStringIO.StringIO.writelines fonction est d'essayer apparemment en essayant de l'encoder au format ascii:
result.writelines(['blahblah',a.desc,'blahblahblah'])
Comment puis-je charger pour traiter l'encodage unicode si c'est le bon phrasé?
app engine s'exécute sur python 2.5
Vous devez vous connecter pour publier un commentaire.
StringIO documentation:
Si possible, utilisez StringIO au lieu de cStringIO.
Vous pouvez envelopper le StringIO objet dans un
codecs.StreamReaderWriter
objet automatiquement de coder et de décoder le format unicode.Comme ceci:
buffer
sera rempli avec de l'utf-8 octets.Si je comprends bien votre dossier correctement, vous aurez seulement besoin d'écrire, de sorte que vous pourriez aussi le faire:
cStringIO.StringIO()
ne fonctionne pas dans lewith
déclaration, mais l'emballage est retourné parcodecs.StreamReaderWriter()
ne!Vous pouvez aussi encoder votre chaîne de caractères en utf-8 manuellement avant de l'ajouter à la StringIO
isinstance
au lieu detype is X
La version 2.6 de Python introduite le
io
module et vous devriez envisager d'utiliserio.StringIO()
, "Une mémoire de flux de texte unicode."Dans les anciennes versions de python ce n'est pas optimisée (pur Python), dans les versions ultérieures de ce qui a été optimisé pour (rapide) du code C.