Às vezes é necessário melhorar a qualificação e, em geral, é útil para o cérebro estudar. É por isso que recentemente fiz um curso para aprender Python e todos os seus frameworks. Outro dia cheguei ao Django. E aqui, durante o treinamento, capturamos coletivamente não apenas um bug, mas um efeito maravilhoso na junção de Python 3, Sqlite 3, JSON e Win 10. Além disso, o efeito foi tão maravilhoso que o Google não nos ajudou - todo o grupo interessado tinha que se reunir com o professor e resolver com a mente coletiva.
Mas o ponto é este: estudamos o banco de dados (e o Django tem o Sqlite 3 pré-instalado) e, para não precisarmos direcionar os dados novamente com nossas mãos, estreitamos o carregamento com um script de arquivos json. E os dados do banco de dados foram despejados nos arquivos usando os métodos Python:
python manage.py dumpdata -e contenttypes -o db.json
De repente, aqueles que trabalhavam no Windows (não posso garantir todas as versões, apenas residentes do Win 10 vieram conosco), descobriram que estavam despejando a codificação do Windows-1251. Além disso, jaysons nesta codificação são perfeitamente alimentados para o banco de dados. Mas assim que eles foram reformatados nos documentos padrão para Sqlite 3, Python 3 e especialmente para JSON, a codificação UTF-8, na melhor das hipóteses, o alfabeto cirílico no banco de dados se transformou em uma abóbora e, na pior, todos os dados o processo de carregamento foi interrompido.
Nada desse tipo pode ser encontrado na documentação ou no restante do Google, incluindo o idioma inglês. O que é mais misterioso, o carregamento manual dos mesmos dados através do console ou painel de administração do projeto funcionou como um relógio, embora a codificação fosse definitivamente UTF-8. Além disso, a prescrição obrigatória da codificação à base de dados não surtiu efeito.
Presumimos que a razão para o efeito foi a interação de Jason com o sistema operacional - de alguma forma, ao escrever e ler Jason, o sistema impôs sua própria codificação em vez da normal. E, de fato, quando a codificação UTF-8 foi configurada à força ao abrir o arquivo:
open(os.path.join(JSON_PATH, file_name + '.json'), 'r', encoding="utf-8")
não foi krakozyabry que entrou na base, mas letras russas normais. Mas o problema com a criação de um dump dessa forma não pode ser resolvido e, em seguida, retrabalhar a codificação manualmente também não é o nosso caminho.
.
. :
, , :
( ) :
"" " ":
"-: (UTF-8) .
, .
, ( , ), - . .