【发布时间】:2010-11-20 14:38:03
【问题描述】:
总结一下:如何独立打印unicode系统来产生扑克牌符号?
我做错了什么,我认为自己在 Python 中相当流利,除了我似乎无法正确打印!
# coding: utf-8
from __future__ import print_function
from __future__ import unicode_literals
import sys
symbols = ('♥','♦','♠','♣')
# red suits to sdterr for IDLE
print(' '.join(symbols[:2]), file=sys.stderr)
print(' '.join(symbols[2:]))
sys.stdout.write(symbols) # also correct in IDLE
print(' '.join(symbols))
打印到控制台,这是控制台应用程序的主要问题,但失败得很惨:
J:\test>chcp
Aktiivinen koodisivu: 850
J:\test>symbol2
Traceback (most recent call last):
File "J:\test\symbol2.py", line 9, in <module>
print(''.join(symbols))
File "J:\Python26\lib\encodings\cp850.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-3: character maps to <unde
fined>
J:\test>chcp 437
Aktiivinen koodisivu: 437
J:\test>d:\Python27\python.exe symbol2.py
Traceback (most recent call last):
File "symbol2.py", line 6, in <module>
print(' '.join(symbols))
File "d:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2660' in position 0: character maps
o <undefined>
J:\test>
所以 summa summarum 我有控制台应用程序,只要您不使用控制台,而是 IDLE,它就可以工作。
我当然可以通过 chr 生成符号来自己生成符号:
# correct symbols for cp850
print(''.join(chr(n) for n in range(3,3+4)))
但这看起来很愚蠢。而且我不会让程序只在 Windows 上运行或有许多特殊情况(如条件编译)。我想要可读的代码。
我不介意它输出哪些字母,只要它看起来正确,无论是诺基亚手机、Windows 还是 Linux。 Unicode 应该可以,但无法正确打印到控制台
【问题讨论】:
-
Windows 控制台使用通常不可打印的字符打印卡片符号,特别是
print '\x03\x04\x05\x06'。 cp437(美国 Windows 控制台)和 cp850 本身不支持这些字符。请参阅本页表格末尾的注释:en.wikipedia.org/wiki/Code_page_850 -
我知道,请参阅我修改后的帖子末尾的代码。 “C0 控制范围(0x00–0x1F 十六进制)被映射到图形字符。代码可以假定它们作为控件的原始功能(因为它们仍然这样做 - 键入“echo”、空格、control-G,然后 Enter 会导致 PC 扬声器发出哔声——即使在 Windows XP 的命令提示符下),但在显示中,例如在 MS-DOS 编辑等屏幕编辑器中,它们显示为图形。图形多种多样,如笑脸、卡片套装和音符。”他们在那里,为什么他们不打印为 unicode?span>
标签: python windows-xp cmd