这是一个小程序:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
print('abcd kΩ °C √Hz µF ü ')
print(u'abcd kΩ °C √Hz µF ü ')
在Ubuntu,Gnome终端上,IPython做了我所期望的:
In [6]: run Unicodetest.py
abcd kΩ °C √Hz µF ü
abcd kΩ °C √Hz µF ü
如果我输入命令,我会得到相同的输出 trypython.org。
codepad.org另一方面,为第二个命令产生错误:
abcd kΩ °C √Hz µF ü
Traceback (most recent call last):
Line 6, in <module>
print(u'abcd kΩ °C √Hz µF ü ')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u03a9' in position 6: ordinal not in range(128)
相反,Windows上的IDLE会破坏第一个命令的输出,但不会抱怨第二个命令:
>>>
abcd kΠ☠°C √Hz µF ü ☃ â¥
abcd kΩ °C √Hz µF ü
在Windows命令提示符下或通过Python(x,y)的Console2版本的IPython都会破坏第一个输出并抱怨第二个输出:
In [9]: run Unicodetest.py
abcd kΩ ☠ °C √Hz µF ü ☃ ♥
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)
Desktop\Unicodetest.py in <module>()
4 print('abcd kΩ ☠ °C √Hz µF ü ☃ ♥')
5
----> 6 print(u'abcd kΩ ☠ °C √Hz µF ü ☃ ♥')
7
8
C:\Python27\lib\encodings\cp437.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 character u'\u2620' in position 8: character maps to <undefined>
WARNING: Failure executing file: <Unicodetest.py>
Python(x,y)的Spyder中的IPython也是如此,但不同:
In [8]: run Unicodetest.py
abcd kΠ☠°C √Hz µF ü ☃ â¥
------------------------------------------------------------
Traceback (most recent call last):
File "Unicodetest.py", line 6, in <module>
print(u'abcd kΠ☠°C √Hz µF ü ☃ â¥')
File "C:\Python26\lib\encodings\cp1252.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u03a9' in position 6: character maps to <undefined>
WARNING: Failure executing file: <Unicodetest.py>
(在 sitecustomize.py,Spyder设定了自己的 SPYDER_ENCODING
基于locale模块的编码,即 cp1252
对于Windows 7.)
是什么赋予了?我的命令之一是错的吗?为什么一个平台在某些平台上运行而另一个平台在其他平台上运行?如何在不崩溃或搞砸的情况下始终如一地打印Unicode字符?
是否有一个Windows的备用终端,其行为类似于Ubuntu中的终端?似乎TCC-LE,Console2,Git Bash,PyCmd等都只是cmd.exe的包装而不是替换。有没有办法在IDLE使用的接口内运行IPython?