Eu tenho um script python que exporta dados de uma tabela mysql utf-8 para um arquivo de texto. Aqui está o código que faz o trabalho
csvDatei = codecs.open( csvDateiName, "w", "utf-8" )
...
cursor = db.cursor();
sql = "select * from %s.%s;" % (dbAusgang, tabelle)
cursor.execute(sql);
...
daten = cursor.fetchall();
for i in xrange(len(daten)):
line = '';
for j in xrange(len(daten[i])):
line += '"%s";' % unicode(daten[i][j]);
line = line[:-1];
line += '\n';
csvDatei.write(line);
csvDatei.close();
Eu também tentei isso
line += '"%s";' % str(daten[i][j]);
e
line += '"%s";' % daten[i][j];
E agora a parte que eu não entendo:
Normalmente, esse script deve ser chamado por uma tarefa cron. Mas quando eu leio um varchar de uma tabela que contém um trema como ä, ö ou ü o script simplesmente termina. Eu verifiquei isso canalizando a saída do script em um arquivo.
Por isso testei o script invocando-o manualmente no shell simplesmente digitando "python myscript.py" e ele corre perfeitamente bem sem problemas.
Então, meu palpite é que o problema realmente não está no script em si, mas sim no ambiente do cron de alguma forma.
Espero que qualquer um de vocês possa me dar conselhos. Estou completamente confuso.
Qualquer ajuda é apreciada.
---------------- Resposta para comentar 1:
Obrigado pela dica com a localidade.
Primeiro escrevi "locale" no shell padrão. Isso me deu a seguinte saída:
dhl@srv1093:~$ locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=de_DE.UTF-8
Depois editei o arquivo cron com "crontab -e" e adicionei a seguinte linha
*/1 * * * * locale > /home/user/locale.ouput
A saída deste cronjob é:
dhl@srv1093:~$ cat locale.ouput
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
Então, isso pode ser o problema? Como posso consertar isso?