首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPython中输入编码的奇怪问题

IPython中输入编码的奇怪问题
EN

Stack Overflow用户
提问于 2010-02-14 10:58:37
回答 3查看 8.9K关注 0票数 13

我在Windows SP3上使用最新的SP3运行python2.6,我有两个问题。第一个问题是,在IPython下,我不能直接输入Unicode字符串,因此不能打开非拉丁名称的文件。让我演示一下。在通常的python中,这个工作:

代码语言:javascript
复制
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'mbcs'
>>> fd = open(u'm:/Блокнот/home.tdl')
>>> print u'm:/Блокнот/home.tdl'
m:/Блокнот/home.tdl
>>>

顺便说一句,这是西里尔语。在IPython下,我得到:

代码语言:javascript
复制
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]:

第二个问题不那么令人沮丧,但仍然如此。当我试图打开一个文件,并将文件名参数指定为非unicode字符串时,它不会打开。在打开文件之前,我必须强制从OEM字符集解码字符串,这是非常不方便的:

代码语言:javascript
复制
>>> fd2 = open('m:/Блокнот/home.tdl'.decode('cp866'))
>>>

也许这与我的区域设置有关,我不知道,因为我甚至不能从控制台剪切和粘贴西里尔文字。我把“俄语”放在任何地方,但它似乎不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-14 11:11:48

是。在控制台上输入Unicode总是有问题的,通常最好避免,但是IPython尤其破产。它转换您在其控制台上键入的字符,就好像它们是用ISO-8859-1编码的一样,而不管您给它的实际编码是什么。

现在,你必须说u'm:/\u0411\u043b\u043e\u043a\u043d\u043e\u0442/home.tdl'

票数 12
EN

Stack Overflow用户

发布于 2011-04-14 16:28:26

反其道而行之,这是可行的:

代码语言:javascript
复制
fd = open('m:/Блокнот/home.tdl')

或者:

代码语言:javascript
复制
fd = open('m:/Блокнот/home.tdl'.encode('utf-8'))

通过将字符串输入为原始的UTF-8编码字节-字符串,可以避免ipython的错误。ipython没有尝试过任何有趣的事情。如果你愿意的话,你可以自由地将它编码成unicode字符串,然后继续你的生活。

票数 1
EN

Stack Overflow用户

发布于 2010-11-10 10:55:49

我在希腊语输入方面也有同样的问题,这个来自发射台的贴片也适用于我。

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2260815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档