Question

Je python en cours d'exécution 2.6 avec le dernier IPython sous Windows XP SP3, et j'ai deux questions. Tout d'abord l'un de mes problèmes est, quand sous IPython, je ne peux pas saisir les chaînes Unicode directement, et, par conséquent, ne peut pas ouvrir des fichiers avec des noms non-latins. Permettez-moi de démontrer. Sous python d'habitude cela fonctionne:

>>> 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, par la voie. 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 je tente d'ouvrir un fichier et spécifiez argument de nom de fichier en tant que chaîne non-unicode, il ne s'ouvre pas. Je dois force decode chaîne 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 ne peux pas couper et coller du texte même cyrillique de la console. Je l'ai mis « russe » partout dans les paramètres régionaux, mais il ne semble pas fonctionner.

Était-ce utile?

La solution

Oui. Taper Unicode sur la console est toujours problématique et généralement mieux éviter, mais IPython est particulièrement cassé . Il convertit les caractères que vous tapez sur sa console comme si elles étaient codées dans la norme ISO-8859-1, quel que soit le codage réel que vous le donner.

Pour l'instant, vous devrez dire u'm:/\u0411\u043b\u043e\u043a\u043d\u043e\u0442/home.tdl'.

Autres conseils

assez Perversement, cela fonctionnera:

fd = open('m:/Блокнот/home.tdl')

Ou:

fd = open('m:/Блокнот/home.tdl'.encode('utf-8'))

obtient autour du bug de ipython en entrant la chaîne en UTF-8 octets chaîne encodée brut. ipython ne cherche pas toute entreprise drôle avec elle. Vous êtes alors libre de l'encoder dans une chaîne unicode si vous voulez, et se concentrer sur votre vie.

J'ai eu le même problème avec l'entrée grecque, de launchpad fonctionne pour moi aussi.

Merci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top