Manchmal ist es notwendig, die Qualifikation zu verbessern, und im Allgemeinen ist es für das Gehirn nützlich, zu lernen. Deshalb habe ich kürzlich einen Kurs besucht, um Python und all seine Frameworks zu lernen. Neulich bin ich in Django angekommen. Und hier haben wir im Verlauf des Trainings nicht nur einen Fehler, sondern auch einen wunderbaren Effekt an der Kreuzung von Python 3, Sqlite 3, JSON und Win 10 entdeckt. Außerdem war der Effekt so großartig, dass Google uns nicht geholfen hat - Die gesamte interessierte Gruppe musste sich mit dem Lehrer zusammensetzen und es mit dem kollektiven Verstand lösen.
Der Punkt ist jedoch folgender: Wir haben die Datenbank untersucht (und Django hat Sqlite 3 vorinstalliert) und das Laden mit einem Skript aus JSON-Dateien verschärft, damit wir die Daten nicht erneut mit den Händen eingeben müssen. Die Daten aus der Datenbank wurden mit den Python-Methoden in die Dateien kopiert:
python manage.py dumpdata -e contenttypes -o db.json
Plötzlich stellten diejenigen, die unter Windows arbeiteten (ich kann nicht für alle Versionen bürgen, nur Win 10-Bewohner kamen auf uns zu), fest, dass sie in Windows-1251-Codierung kopierten. Darüber hinaus werden Jaysons in dieser Codierung perfekt in die Datenbank eingespeist. Sobald sie jedoch in die Standarddokumente für Sqlite 3, Python 3 und insbesondere für JSON neu formatiert wurden, verwandelte sich die UTF-8-Codierung bestenfalls in das kyrillische Alphabet in der Datenbank in einen Kürbis und im schlimmsten Fall in die gesamten Daten Der Ladevorgang ist zusammengebrochen.
Nichts dergleichen konnte weder in der Dokumentation noch im Rest von Google gefunden werden, einschließlich der englischen Sprache. Was am mysteriösesten ist, war das manuelle Laden derselben Daten über die Konsole oder das Admin-Panel des Projekts wie eine Uhr, obwohl die Codierung dort definitiv UTF-8 war. Darüber hinaus hat die obligatorische Verschreibung der Kodierung in die Datenbank keine Wirkung gezeigt.
Wir nahmen an, dass der Grund für den Effekt die Interaktion von Jason mit dem Betriebssystem war - irgendwie hat das System beim Schreiben und Lesen von Jason eine eigene Codierung anstelle der normalen auferlegt. Und tatsächlich, als die UTF-8-Codierung beim Öffnen der Datei zwangsweise festgelegt wurde:
open(os.path.join(JSON_PATH, file_name + '.json'), 'r', encoding="utf-8")
Es war nicht Krakozyabry, der in die Basis kam, sondern normale russische Buchstaben. Das Problem beim Erstellen eines Dumps auf diese Weise kann jedoch nicht gelöst werden, und die Überarbeitung der Codierung von Hand ist auch irgendwie nicht unser Weg.
.
. :
, , :
( ) :
"" " ":
"-: (UTF-8) .
, .
, ( , ), - . .