Rapidinha

 Se você quer saber mais sobre o Autor, não deixe de conferir a sessão exclusiva com a meta informação do site.
 
powered_by.png, 1 kB

Home arrow Computação arrow Artigos arrow MySQL, Python e UTF-8
MySQL, Python e UTF-8 PDF Imprimir E-mail
Por Thomas Lopes   
07 de July de 2008

Esse final de semana, lá estava eu, trabalhando em meu TCC, coletando dados da Internet... quando de repente, me deparo com uma barreira não prevista: problemas de conjunto de caracteres.

Até então, estava tudo correndo bem. O BeutifulSoup (um parser [X]HTML/XML que ajuda a processar conteúdo web) trazendo tudo para Unicode , e a escrita de arquivos correndo perfeita. Então, parti para a escrita dos dados no banco, MySQL (banco de dados free, open-source, recentemente comprado pela SUN), e aí começaram os problemas: Percebi que alguns conteúdos estavam entrando no banco com caracteres bizarros no meio das palavras, como 'notícias', 'Conteúdo', etc... dependendo da fonte (página) onde se encontra o texto (quando as páginas não tinham a codificação correta no cabeçalho, principalmente. 

Mesmo utilizando o decode certo ( string.decode('utf-8') ), continuava a receber erros e caracteres estranhos. As tabelas e campos já estavam com seu collation type configurado corretamente para esse caso (utf8_general_ci), e mesmo assim, o problema persistia

Pronto, só restava: revisão do código.

...Nenhum problema. Aí resolvi testar escrevendo os dados num arquivo texto normal, antes de gravar no banco. Resultado: os arquivos eram gravados normalmente, em UTF-8, sem problemas: Conclusão: problema com o Banco de dados, ou com o conector utilizado (MySQLdb). Tentei de tudo, vários decodes,encodes, e continuava obtendo erro:

UnicodeEncodeError:'latin-1' codec can't encode character ...

Até que encontrei esse post do blog Dasprid's, onde o autor mostra como sanar esse mesmo problema. Simples de tudo. basta setar algumas variáveis de ambiente do MySQL para que funcione corretamente com a codificação UTF-8 (aliás, recomendo usar UTF-8 em tudo viu. Recomendo a leitura desse artigo: Tudo Sobre Python e Unicode ). Para se ter uma idéia, basta fazer os seguintes comandos:

db.set_character_set('utf8')
dbc.execute('SET NAMES utf8;')
dbc.execute('SET CHARACTER SET utf8;')
dbc.execute('SET character_set_connection=utf8;')

Onde db é o seu objeto connect, e dbc o objeto cursor. Muito simples, e resolveu um problema que arranca cabelos de muitos. E mais umavez, o Python demonstrando como as soluções podem ser simples, simples mesmo.
Comentarios (1)Add Comment
Hehe
escrito por DASPRiD, October 29, 2008
Just found your comment in my blog, nice that it helped you.

Escreva seu Comentario
quote
bold
italicize
underline
strike
url
image
quote
quote
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley

security code
Escreva os caracteres mostrados


busy
Última Atualização ( 07 de July de 2008 )
 
< Anterior   Próximo >
© 2012 THLopes.com
Joomla! is Free Software released under the GNU/GPL License.