13

Windows XPSP3で最新のIPythonを使用してPython2.6を実行していますが、2つの質問があります。私の問題の最初の1つは、IPythonでUnicode文字列を直接入力できず、その結果、ラテン語以外の名前のファイルを開くことができないことです。実演させてください。通常のPythonでは、これは機能します。

>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'mbcs'
>>> fd = open(u'm:/Блокнот/home.tdl')
>>> print u'm:/Блокнот/home.tdl'
m:/Блокнот/home.tdl
>>>

ちなみに、そこはキリル文字です。そして、IPythonの下で私は得ます:

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]:

2番目の問題はそれほどイライラすることではありませんが、それでもです。ファイルを開こうとして、ファイル名引数を非ユニコード文字列として指定すると、ファイルが開きません。ファイルを開く前に、OEM文字セットから文字列を強制的にデコードする必要があります。これは非常に不便です。

>>> fd2 = open('m:/Блокнот/home.tdl'.decode('cp866'))
>>>

コンソールからキリル文字をカットアンドペーストすることすらできないので、地域の設定と関係があるのか​​もしれませんが、わかりません。地域の設定のいたるところに「ロシア語」を配置しましたが、機能していないようです。

4

3 に答える 3

12

はい。コンソールで Unicode を入力することは常に問題があり、通常は避けるのが最善ですが、IPython は特に壊れています。コンソールに入力した文字は、実際のエンコーディングに関係なく、ISO-8859-1 でエンコードされているかのように変換されます。

今のところ、あなたは言わなければならないでしょうu'm:/\u0411\u043b\u043e\u043a\u043d\u043e\u0442/home.tdl'.

于 2010-02-14T11:11:48.677 に答える
1

逆に、これはうまくいきます:

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

または:

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

これは、生の UTF-8 でエンコードされたバイト文字列として文字列を入力することで、ipython のバグを回避します。ipython は、面白いビジネスを試みません。その後、必要に応じて自由に Unicode 文字列にエンコードし、生活を続けることができます。

于 2011-04-14T16:28:26.667 に答える
0

ギリシャ語の入力でも同じ問題が発生しました。launchpadからのこのパッチは私にも機能します。

ありがとう。

于 2010-11-10T10:55:49.533 に答える