【发布时间】:2015-11-16 13:36:44
【问题描述】:
我认为在 21 世纪这不是问题,但是:
import sys
from PySide import QtGui
print('\u2122')
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.setWindowTitle('\u2122')
widget.show()
sys.exit(app.exec_())
在 Ubuntu 上,在窗口和终端中都显示商标符号,在 Windows (10) 上,它在两个地方都显示 \u2122。我在两个系统上都使用python 3.4,在 Windows 上它是 Canopy 安装,如果有帮助的话,但可能与此完全无关。如何让 unicode 字符也显示在 Windows 上?
编辑
好的,事实证明拥有print() 并不能使它成为python 3,我的错。虽然当我将字符串修复为u'\u2122 时,Windows python 2.7.9 给出了一个有趣的错误:
File "C:\Program Files\Enthought\Canopy32\App\appdata\canopy-1.5.5.3123.win-x86\lib\encodings\cp852.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2122' in position 0: character maps to <undefined>
无论如何,安装 3.x 将解决问题。
【问题讨论】:
-
您确定您的 Windows 安装是 3.x 吗?所描述的行为将在 Python 2.x 下发生。作为测试,将字符串更改为 2.x Unicode 字符串,看看会发生什么。例如。
u'\u2122' -
我很确定因为
print()在 python 2.x 下应该给我一个错误,对吧?但我会检查:) -
不,
print()在某些时候成为 2.x 中的有效语法 -
@AlastairMcCormack,在 2.x 中
print()只是打印(不必要的)括号中的表达式。这不是函数调用。如果您尝试print('a', 'b'),您会看到它会将('a', 'b')解析并打印为一个元组。
标签: windows python-3.x unicode