Django UnicodeEncodeError com upload usando WSGI
Se você se deparou com um UnicodeEncodeError ao fazer o upload de algum arquivo com caracteres especiais usando WSGI no Django, a solução pode estar aqui: How to use django with mod_wsgi – Additional Tweaking.
Eu passei pelo seguinte erro:
UnicodeEncodeError: 'ascii' codec can't encode characters
in position 86-87: ordinal not in range(128)
Em resumo é preciso alterar as variáveis de ambiente LANG e LC_ALL do Apache:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
Isto é feito alterando o arquivo envvars do Apache, normalmente em /etc/apache2/envvars.
Em algumas instalações / distribuições, este arquivo pode não existir ou não estar sendo chamado no httpd.conf, neste caso é preciso configurar manualmente.
No FreeBSD é preciso criar um arquivo com a extensão .env em /usr/local/etc/apache2/envvars.d. Como isto é ligado ao WSGI, chamei de mod_wsgi.env.
Depois de alterar é preciso reiniciar o apache.
Agora uploads de arquivos nomeados com caracteres especiais funcionam normalmente.
Já experimentou configurar o locale para todo o servidor, não só para o Apache? Deveria funcionar, o Apache deveria usar os LC* do ambiente.
Olá Henrique!
Até pensei nisso, mas como o meu problema era isolado, preferi ajustar apenas o Apache, para evitar qualquer efeito colateral não desejado.
Mas concordo contigo, acho que seria uma alternativa para resolver o problema.
Abraço.