quinta-feira, 27 de setembro de 2007

Python MySQLdb e UTF-8

O python é uma excelente linguagem, estranhamente, apesar de ser feita por um europeu, o suporte para caracteres não ASCII é aquilo a que se pode chamar um fumegante monte de bosta. Quando se mete o MySQLdb e UTF-8 ao barulho então esse monte aumenta de uma forma brutal.
Umas pesquisas pelo google não trouxeram grande resultado, a única coisa que descobri foi uma data de gente desesperada com o problema.
Mas aparentemente, para quem estiver a fazer aplicações web existe uma solução que pode dar algum jeito:

>>> teste = u"HEllo\u1361World"
>>> print teste.encode("latin_1", "xmlcharrefreplace")
HEllo፡World

Isto permite gravar os dados na base de dados fazendo a ligação usando o encoding "latin_1" como o MySQLdb insiste em gostar de fazer, e ao mesmo tempo esquivar ao problema do caracter \u1361 não poder ser convertido para latin_1.
Ainda fiz mais um teste

>>> open("teste.html", "w").write(teste.encode("latin_1", "xmlcharrefreplace"))

De seguida abri o teste.html e pude verificar que o caracter aparecia correctamente.

Sem comentários: