2012-12-02 29 views
1

我发现了很多像♥和❦这样的特殊符号,我想用于Python 3.3的程序,并且程序工作正常在IDLE,但是当我运行使用它的命令行立即死机,提供有关字符的错误不被认可:Python 3.3:通过命令行运行时打印♥和❦等特殊符号

Traceback (most recent call last): 
    File "C:python33\meh.py", line 1, in <module> 
     print("\u2665") 
    File "C:\python33\lib\encodings\cp437.py", line 19, in encode 
     return codecs.charmap_encode(input,self.errors,encoding_map)[0] 
UnicodeEncodeError: 'charmap' codec can't encode character 'u\u2665' in position 0: character maps to <undefined> 

一个如何去获得这些符号map<undefined>所以其他别的东西可以在命令行中显示?

我假设我可以尝试添加到python的cp437.py(从错误中计算出来),但我不知道如何获得每个符号的十六进制/十进制/无论什么和放在哪里。

示例LATIN CAPITAL LETTER下用变音符号:

--decoding地图键和值:0x0080: 0x00c7, # LATIN CAPITAL LETTER C WITH CEDILLA

--decoding表字符串:'\xc7' # 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA

--encoding地图键和值:0x00c7: 0x0080, # LATIN CAPITAL LETTER C WITH CEDILLA

我不知道所有的符号是否都需要全部三个(更别说每个都做什么了)。一些有解码图和表,但其他的只有解码表和编码图。

回答

3

您必须正确编码您的终端的字符。 Pragmatic Unicode, or, How Do I Stop The Pain有详细信息。

例如:

print(my_text.encode('utf8')) 
+0

使用该代码将只显示“b'\ xe2 \ x99 \ xa5”。 (心脏)我如何获得实际的心脏符号?我会继续阅读您发布的链接...感谢您的帮助! –

+0

我已阅读您发布的链接和许多其他文档,但没有地址允许打印特殊符号。 –

+0

@DougWillden,它取决于两件事情:您的控制台识别的输出编码以及选择到该控制台中的字体。理想情况下,您需要一个能够识别UTF-8的控制台以及包含要显示的字符的字体。 –

0

个人而言,这就像在Ubuntu上,对我来说是魅力它默认使用Unicode,但你可以尝试打印使用

import sys 
TestText = "Test - āĀēĒčČ..šŠūŪžŽ" # this NOT utf-8...it is a Unicode string in Python 3.X. 
TestText2 = TestText.encode('utf8') 
sys.stdout.buffer.write(TestText2) 

文本从https://stackoverflow.com/a/3603160/160386

+0

我想,刚才,但这里是我的了: '回溯(最近通话最后一个): 文件 “”,1号线,在 sys.stdout.buffer.write(TestText2) AttributeError的:buffer' 我现在通读链接...感谢您的帮助! –

+0

是的,对不起,这个链接似乎没有太大帮助...更多细节和错误我不明白。不过,感谢您的帮助。 –