我发现了很多与此相同的问题 - 但尽管我付出了最大的努力,但我无法让任何解决方案发挥作用。
我正在尝试打印extended-ascii字符来制作一个旧的基于文本的菜单。这是我的原始代码:
print('╔════════════════════════════════════╗')
print('║ Hello World! ║')
print('╚════════════════════════════════════╝')
当我运行.py文件时,我的输出如下所示:
??????????????????????????????????????
? Hello World! ?
??????????????????????????????????????
我使用的是Python 3.3.1,需要一个能够在Windows和Linux中“正常工作”的解决方案。我尝试在我的Windows控制台中使用chcp 65001
,但没有任何运气。
我尝试过使用'setdefaultencoding',但我相信它不再适用于Python 3.
答案 0 :(得分:4)
必须有更好的方法,但是这样的事情怎么样:
dic = {
'\\' : b'\xe2\x95\x9a',
'-' : b'\xe2\x95\x90',
'/' : b'\xe2\x95\x9d',
'|' : b'\xe2\x95\x91',
'+' : b'\xe2\x95\x94',
'%' : b'\xe2\x95\x97',
}
def decode(x):
return (''.join(dic.get(i, i.encode('utf-8')).decode('utf-8') for i in x))
print(decode('+------------------------------------%'))
print(decode('| Hello World! |'))
print(decode('\\------------------------------------/'))
视窗:
C:\Temp>python temp.py
╔════════════════════════════════════╗
║ Hello World! ║
╚════════════════════════════════════╝
Linux的:
$ python3 temp.py
╔════════════════════════════════════╗
║ Hello World! ║
╚════════════════════════════════════╝
答案 1 :(得分:3)
使用Python 3及其Unicode字符串,只要遵循这些规则,原始代码就可以正常工作:
#coding: <encoding>
声明源编码。请注意,我在下面添加的coding
语句是可选,因为{3}是Python 3的默认语句。只需确保您的文件实际上以正确的编码保存。 / p>
utf8
我的Windows控制台上的输出(代码页437,Consolas字体):
# coding: utf8
print('╔════════════════════════════════════╗')
print('║ Hello World! ║')
print('╚════════════════════════════════════╝')
我的PythonWin IDE上的输出(UTF-8编码,以及通常的Linux默认值,加上Courier New字体):
╔════════════════════════════════════╗
║ Hello World! ║
╚════════════════════════════════════╝
注意╔════════════════════════════════════╗
║ Hello World! ║
╚════════════════════════════════════╝
(UTF-8)在Windows和/或Python 3上存在错误:
chcp 65001
另请注意,即使在Python 2上也不需要╔════════════════════════════════════╗
��═══════════════════════╗
�══════════════╗
�════════╗
�════╗
��═╗
��
║ Hello World! ║
��
╚════════════════════════════════════╝
��═══════════════════════╝
�══════════════╝
�════════╝
�════╝
��═╝
��
。Unicode字符串不是默认值。此代码适用于Python 2.X 和 Python 3.3及更高版本,因为Python 3.3添加了可选的setdefaultdecoding
语法,以帮助移植Python 2.X代码:
u''
答案 2 :(得分:1)
这是我能观察到的。请注意,在我的情况下,默认编码为852(Windows 7,捷克语)。代码存储在UTF-8中,并使用了Python 3.3.0。
这似乎是错误,但我不知道是在Python中,在Windows控制台中,还是在我的椅子或键盘之间。