在Windows 3和Linux中打印扩展的Ascii字符

时间:2013-06-22 20:01:10

标签: python python-3.x ascii

我发现了很多与此相同的问题 - 但尽管我付出了最大的努力,但我无法让任何解决方案发挥作用。

我正在尝试打印extended-ascii字符来制作一个旧的基于文本的菜单。这是我的原始代码:

print('╔════════════════════════════════════╗')
print('║           Hello World!             ║')
print('╚════════════════════════════════════╝')

当我运行.py文件时,我的输出如下所示:

??????????????????????????????????????
?           Hello World!             ?
??????????????????????????????????????

我使用的是Python 3.3.1,需要一个能够在Windows和Linux中“正常工作”的解决方案。我尝试在我的Windows控制台中使用chcp 65001,但没有任何运气。

我尝试过使用'setdefaultencoding',但我相信它不再适用于Python 3.

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字符串,只要遵循这些规则,原始代码就可以正常工作:

  • 将文件保存为支持字符的编码。
  • 如果不是UTF-8默认值,则通过#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。

enter image description here

这似乎是错误,但我不知道是在Python中,在Windows控制台中,还是在我的椅子或键盘之间。