Otra peculiaridad de Win 10, y cómo lidiar con ella

A veces es necesario mejorar la calificación y, en general, es útil que el cerebro estudie. Es por eso que recientemente tomé un curso para aprender Python y todos sus frameworks. El otro día llegué a Django. Y aquí, en el curso del entrenamiento, colectivamente detectamos no solo un error, sino un efecto maravilloso en la unión de Python 3, Sqlite 3, JSON y Win 10. Además, el efecto fue tan maravilloso que Google no nos ayudó - todo el grupo interesado tuvo que juntarse con el profesor y resolverlo con la mente colectiva.





Pero el punto es este: estudiamos la base de datos (y Django tiene Sqlite 3 preinstalado) y, para que no necesitemos volver a introducir los datos con nuestras manos, ajustamos la carga con un script de archivos json. Y los datos de la base de datos se volcaron en los archivos utilizando los métodos de Python:





python manage.py dumpdata -e contenttypes -o db.json
      
      



De repente, aquellos que trabajaban con Windows (no puedo responder por todas las versiones, solo los residentes de Win 10 se nos ocurrieron), descubrieron que estaban volcando la codificación de Windows-1251. Además, los jayson en esta codificación se alimentan perfectamente a la base de datos. Pero tan pronto como se reformatearon en los documentos estándar para Sqlite 3, Python 3 y especialmente para JSON, la codificación UTF-8, en el mejor de los casos, el alfabeto cirílico en la base de datos se convirtió en una calabaza, y en el peor de los casos, todos los datos. el proceso de carga se rompió.





No se pudo encontrar nada por el estilo ni en la documentación ni en el resto de Google, incluido el idioma inglés. Lo más misterioso, la carga manual de los mismos datos a través de la consola o el panel de administración del proyecto funcionaba como un reloj, aunque la codificación allí definitivamente era UTF-8. Además, la prescripción obligatoria de la codificación a la base de datos no surtió efecto.





Supusimos que la razón del efecto era la interacción de Jason con el sistema operativo; de alguna manera, al escribir y leer a Jason, el sistema imponía su propia codificación en lugar de la normal. Y, de hecho, cuando la codificación UTF-8 se estableció por la fuerza al abrir el archivo:





open(os.path.join(JSON_PATH, file_name + '.json'), 'r', encoding="utf-8")
      
      



no fue krakozyabry lo que entró en la base, sino letras rusas normales. Pero el problema de crear un volcado de esta manera no se puede resolver, y luego volver a trabajar la codificación a mano tampoco es nuestro camino.





.





. :





  • , , :





  • ( ) :





  • "" " ":





  • "-: (UTF-8) .





, .





, ( , ), - . .








All Articles