Terkadang perlu untuk meningkatkan kualifikasi, dan secara umum berguna bagi otak untuk belajar. Itulah mengapa saya baru-baru ini mengambil kursus untuk mempelajari Python dan semua frameworknya. Suatu hari saya sampai di Django. Dan di sini, selama pelatihan, kami secara kolektif menangkap tidak hanya bug, tetapi juga efek yang luar biasa di persimpangan Python 3, Sqlite 3, JSON, dan Win 10. Selain itu, efeknya sangat luar biasa sehingga Google tidak membantu kami - seluruh kelompok yang tertarik harus berkumpul dengan guru dan menyelesaikannya dengan pikiran kolektif.
Tetapi intinya adalah ini: kami mempelajari database (dan Django memiliki Sqlite 3 yang telah diinstal sebelumnya) dan, sehingga kami tidak perlu memasukkan data lagi dengan tangan kami, kami memperketat pemuatan dengan skrip dari file json. Dan data dari database dibuang ke file menggunakan metode Python:
python manage.py dumpdata -e contenttypes -o db.json
Tiba-tiba, mereka yang bekerja di bawah Windows (saya tidak dapat menjamin untuk semua versi, hanya penduduk Win 10 yang datang bersama kami), menemukan bahwa mereka membuang di encoding windows-1251. Selain itu, jayson dalam pengkodean ini diumpankan dengan sempurna ke database. Tetapi segera setelah mereka diformat ulang menjadi dokumen standar untuk Sqlite 3, Python 3, dan terutama untuk JSON, pengkodean UTF-8, paling banter, alfabet Sirilik dalam database berubah menjadi labu, dan paling buruk, seluruh data proses pemuatan rusak.
Tidak ada hal semacam itu yang dapat ditemukan baik dalam dokumentasi atau di bagian Google lainnya, termasuk bahasa Inggris. Yang paling misterius, pemuatan manual dari data yang sama melalui konsol atau panel admin proyek bekerja seperti jam, meskipun pengkodeannya pasti UTF-8. Selain itu, resep wajib pengkodean ke database tidak memberikan efek apa pun.
Kami berasumsi bahwa alasan efeknya adalah interaksi Jason dengan sistem operasi - entah bagaimana, saat menulis dan membaca Jason, sistem memberlakukan pengkodeannya sendiri, bukan yang normal. Dan memang, ketika pengkodean UTF-8 disetel secara paksa saat membuka file:
open(os.path.join(JSON_PATH, file_name + '.json'), 'r', encoding="utf-8")
bukan krakozyabry yang masuk ke pangkalan, tapi huruf Rusia biasa. Tetapi masalah dengan membuat dump dengan cara ini tidak dapat diselesaikan, dan kemudian mengerjakan ulang pengkodean dengan tangan juga bukan cara kami.
.
. :
, , :
( ) :
"" " ":
"-: (UTF-8) .
, .
, ( , ), - . .