Je cours python 2.6 avec le dernier IPython sur Windows XP SP3, et j'ai deux questions. Le premier de mes problèmes est, quand sous IPython, je ne peux pas entrer des chaînes Unicode directement, et, par conséquent, ne peux pas ouvrir des fichiers avec des noms non-latin. Laissez-moi démontrer. Sous python habituel cela fonctionne:Problème étrange avec l'encodage d'entrée dans IPython
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'mbcs'
>>> fd = open(u'm:/Блокнот/home.tdl')
>>> print u'm:/Блокнот/home.tdl'
m:/Блокнот/home.tdl
>>>
Il est cyrillique là-dedans, soit dit en passant. Et sous le IPython je reçois:
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]:
Le deuxième problème est moins frustrant, mais quand même. Lorsque j'essaie d'ouvrir un fichier et de spécifier un argument de nom de fichier comme chaîne non-unicode, il ne s'ouvre pas. Je dois force chaîne de décodage de charset OEM, avant que je puisse ouvrir des fichiers, ce qui est assez pratique:
>>> fd2 = open('m:/Блокнот/home.tdl'.decode('cp866'))
>>>
Peut-être qu'il a quelque chose à mes paramètres régionaux, je ne sais pas, parce que je peux » t même couper et coller le texte cyrillique de la console. J'ai mis "russe" partout dans les paramètres régionaux, mais cela ne semble pas fonctionner.
Oh, d'accord. C'est triste, cependant. Attendront la correction. –
Voici un correctif pour ce problème https://bugs.launchpad.net/ipython/+bug/339642 Supprimez simplement la ligne 'source = source.encode (self.stdin_encoding)' de iplib.py de la distribution IPython. Cela a fonctionné pour moi sous OS X. –
@ t0ster: merci pour le pourboire, travaillé pour moi. Et de penser que j'ai passé plusieurs heures à googler en pensant que c'est un problème de Matplotlib. – Halka