O velho problema de “UnicodeDecodeError” no Plone

O Plone é uma excelente ferramenta, nisso não há dúvidas, no entanto como ele ainda roda apenas com Python 2.x, desenvolvedores e usuários enfrentam um antigo problema desde os primórdios da ferramenta que é em relação ao erro UnicodeDecodeError ou UnicodeEncodeError.

Enquanto em Python 3.x toda string é unicode, o Python 2.x não faz uma distinção clara entre as strings “comuns” e as unicode e isso gera problemas quando estamos trabalhando com o Zope, gerando a tão famosa exceção.

Durante muitos anos (e até hoje) desenvolvedores do mundo todo tem contornado essa situação “dizendo” ao Python para converter automaticamente as strings para unicode, no entanto eles fazem isso à nível de ambiente editando o arquivo sitecustomize.py e inserindo as linhas:

Essa “solução” funciona, mas tem sido desencorajada pelo core do Plone pois com ela os desenvolvedores estavam sendo displiscentes e misturando str() com unicode() no mesmo código havendo muitas quebras de pacote quando você distribuia seu produto e a pessoa que instalava não tinha realizado essa configuração.

O ideal segundo a documentação do Plone é utilizar uma função auxiliar chamada safe_unicode para converter strings do primeiro tipo para o segundo e atribuir a responsabilidade ao desenvolvedor de gerenciar e manter a unidade das strings no código.

Na teoria é muito bonito, mas na prática torna-se inviável principalmente considerando que a língua portuguesa é cheia de palavras acentuadas.

Um exemplo dessa quebra que nos obriga a definir a configuração do unicode automático é quando estamos utilizando o produto brasil.gov.facetada responsável pela integração do eea.facetednavigation com o Portal Padrão. Um usuário na lista PloneGovBR reportou um problema que gerava a exceção UnicodeDecodeError quando tentava buscar por palavras como “Previdência Social” por exemplo.

A solução postada pelo Clayton foi ainda melhor do que editar o arquivo sitecustomize.py “na mão”. Que é a criação de uma sessão no arquivo buildout.cfg para definir o unicode automático quando rodar o buildout. Assim você reutiliza o código e não esquece mais de fazer essa configuração!

Fiz pequenas adaptações na solução postada e reproduzo abaixo para ajudar quem precisar no futuro:

Acesse o arquivo buildout.cfg na raiz da instalação do Plone.

Em “parts =” adicionar a seguinte linha:

Então vamos criar a sessão [unicode] logo abaixo:

Salvar e fechar o arquivo e rodar o buildout: ./bin/buldout -Nv

Obs: o diretório da instalação do Python (“Python-2.7” nesse caso) pode mudar dependendo da sua instalação e versão do Plone. Verifique isso antes de usar essa solução.

Referências

http://docs.plone.org/manage/troubleshooting/unicode.html

https://ziade.org/2008/01/08/syssetdefaultencoding-is-evil/

https://listas.interlegis.gov.br/pipermail/plonegov-br/2016-April/003824.html

Sê o primeiro

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *