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