Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

python - Problema ao armazenar caracteres Unicode no MySQL com Django


Obrigado a todos que postaram aqui. Isso realmente ajuda meu conhecimento de unicode (e espero que outras pessoas tenham aprendido algo).

Parecia que estávamos todos latindo para a árvore errada, já que tentei simplificar meu problema e não dei TODAS as informações. Parece que eu não estava usando strings unicode "REAL", mas sim BeautifulSoup.NavigableString que se repr como strings unicode. Assim, todas as impressões pareciam unicode, mas não eram.

Em algum lugar no fundo da biblioteca MySQLDB eles não conseguiam lidar com essas strings.

Isso funcionou:
>>> Achievement.objects.get(name = u"Mirror's Edge\u2122")
<Achievement: Mirror's Edge™>

Por outro lado :
>>> b = BeautifulSoup(u"<span>Mirror's Edge\u2122</span>").span.string
>>> Achievement.objects.get(name = b)
... Exceptoins ...
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 13: ordinal not in range(128)

Mas isso funciona:
>>> Achievement.objects.get(name = unicode(b))
<Achievement: Mirror's Edge™>

Então, obrigado novamente por toda a ajuda unicode, tenho certeza que será útil. Mas para agora ...

AVISO :BeautifulSoup não retorna REAL strings unicode e devem ser coagidas com unicode() antes de fazer qualquer coisa significativa com elas.