Codificación predeterminada de open () de Python 3 en Windows. Configuración de sys.getdefaultencoding () no respetada

He estado sacando mi pelo sobre este tema durante varias horas ahora.

Tengo un archivo de mensajes que quiero generar usando el comando makemessages de django, que funciona bien en un entorno Linux que en realidad maneja la configuración regional de una manera sana. Sin embargo, cuando bash lo mismo en Windows, cada vez que Python intenta abrir un archivo, asume que está codificado en cp932 (SHIFT-JIS), lo que provoca todo tipo de caos.

La adición manual de encoding='utf-8' a cada llamada open funciona, pero no es una buena manera de solucionar el problema. ¿Hay alguna forma de forzar la open para usar una encoding predeterminada específica?

  • sys.getdefaultencoding() devuelve ‘utf-8’, por alguna razón, esta configuración no se respeta
  • PYTHONIOENCODING y PYTHONENCODING están configurados en ‘utf-8’
  • Mi página de códigos está configurada para cp65001

Esta es la cadena de mi versión de python:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32

EDITAR: Me he dado cuenta de que locale.getpreferredencoding() devuelve cp932 , por lo que supongo que encontrar una configuración regional de Windows con utf-8 como su valor predeterminado sería suficiente. ¿Existe tal cosa incluso?

Prueba esto

 import locale locale.setlocale(locale.LC_ALL, 'en_US.utf-8')