Estoy ejecutando Python 2.6 con el último IPython en Windows XP SP3, y tengo dos preguntas. El primero de mis problemas es que, cuando estoy bajo IPython, no puedo ingresar cadenas Unicode directamente y, como resultado, no puedo abrir archivos con nombres que no sean latinos. Déjame demostrar. Bajo pitón de costumbre esto funciona:Problema extraño con la codificación de entrada en IPython
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'mbcs'
>>> fd = open(u'm:/Блокнот/home.tdl')
>>> print u'm:/Блокнот/home.tdl'
m:/Блокнот/home.tdl
>>>
Es cirílico allí, por cierto. Y bajo la IPython me sale:
In [49]: sys.getdefaultencoding()
Out[49]: 'ascii'
In [50]: sys.getfilesystemencoding()
Out[50]: 'mbcs'
In [52]: fd = open(u'm:/Блокнот/home.tdl')
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
C:\Documents and Settings\andrey\<ipython console> in <module>()
IOError: [Errno 2] No such file or directory: u'm:/\x81\xab\xae\xaa\xad\xae\xe2/home.tdl'
In [53]: print u'm:/Блокнот/home.tdl'
-------------->print(u'm:/Блокнот/home.tdl')
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (15, 0))
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
C:\Documents and Settings\andrey\<ipython console> in <module>()
C:\Program Files\Python26\lib\encodings\cp866.pyc in encode(self, input, errors)
10
11 def encode(self,input,errors='strict'):
---> 12 return codecs.charmap_encode(input,errors,encoding_map)
13
14 def decode(self,input,errors='strict'):
UnicodeEncodeError: 'charmap' codec can't encode characters in position 3-9: character maps to <und
In [54]:
El segundo problema es menos frustrante, pero aún así. Cuando intento abrir un archivo y especificar un argumento de nombre de archivo como cadena no unicode, no se abre. Tengo que fuerza cadena de decodificación de OEM juego de caracteres, antes de que pudiera abrir los archivos, lo que es bastante incómodo:
>>> fd2 = open('m:/Блокнот/home.tdl'.decode('cp866'))
>>>
lo mejor tiene algo que ver con mi configuración regional, no lo sé, porque puedo' t incluso cortar texto cirílico de la consola. He puesto "ruso" en todas partes en entornos regionales, pero parece que no funciona.
Oh, de acuerdo. Eso es triste, sin embargo. Esperará la reparación. –
Aquí está el parche para este problema https://bugs.launchpad.net/ipython/+bug/339642 Simplemente elimine la línea 'source = source.encode (self.stdin_encoding)' de iplib.py desde la distribución de IPython. Me funcionó en OS X. –
@ t0ster: gracias por la sugerencia, funcionó para mí. Y pensar que he pasado varias horas buscando en Google pensando que esto es un problema de Matplotlib. – Halka