python 2.7字符\u2013

python 2.7字符\u2013,python,python-2.7,utf-8,windows-console,Python,Python 2.7,Utf 8,Windows Console,我有以下代码: # -*- coding: utf-8 -*- print u"William Burges (1827–81) was an English architect and designer." 当我尝试从cmd运行它时。我得到以下信息: Traceback (most recent call last): File "C:\Python27\utf8.py", line 3, in <module> print u"William Burges (18

我有以下代码:

# -*- coding: utf-8 -*-

print u"William Burges (1827–81) was an English architect and designer."
当我尝试从cmd运行它时。我得到以下信息:

Traceback (most recent call last):
  File "C:\Python27\utf8.py", line 3, in <module>
    print u"William Burges (1827ŌĆō81) was an English architect and designer."
  File "C:\Python27\lib\encodings\cp775.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2013' in position
 20: character maps to <undefined>
但当我尝试打印多个句子时,例如:

# -*- coding: utf-8 -*-

print unicode("William Burges (1827–81) was an English architect and designer. I am here. ", "utf-8").encode("cp866")
我收到相同的错误消息:

Traceback (most recent call last):
  File "C:\Python27\utf8vs.py", line 3, in <module>
    print unicode("William Burges (1827ŌĆō81) was an English architect and desig
ner. I am here. ", "utf-8").encode("cp866")
  File "C:\Python27\lib\encodings\cp866.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u2013' in position
 20: character maps to <undefined>
回溯(最近一次呼叫最后一次):
文件“C:\Python27\utf8vs.py”,第3行,在
印刷unicode(“William Burges(1827)81)是一位英国建筑师和设计师
“我在这里。”,“utf-8”).encode(“cp866”)
文件“C:\Python27\lib\encodings\cp866.py”,第12行,编码
返回编解码器.charmap\u encode(输入、错误、编码\u映射)
UnicodeEncodeError:“charmap”编解码器无法将字符u'\u2013'编码到位
20:角色映射到

我怀疑问题出在print语句上,而不是python固有的任何东西上(它在我的Mac上运行良好)。为了打印字符串,需要将其转换为可显示的格式;在Windows命令行的默认字符集中,无法显示您使用的较长破折号

你两个句子之间的区别不在于长度,而在于“(1827-81)”vs“(1827-81)”中使用的破折号-你能看到细微的区别吗?尝试将一个复制并粘贴到另一个上以检查这一点


另请参见。

实际上wiki.python.org上有一篇关于此问题的wiki文章,解释了为什么使用
charmap
codec会发生这种情况


如上所述设置PythonoEncoding环境变量可用于抑制错误消息。不建议设置为“utf-8”,因为这会导致控制台输出的表示不准确、混乱。为了获得最佳结果,请使用控制台正确的默认代码页和适当的错误处理程序,而不是“strict”。

您的字符串包含ndash sumbol。它类似于ascii减号
-
,请参见符号编号45。将ndash替换为减号,因为ascii不能包含ndash。以下工作变量:

# -*- coding: utf-8 -*-

my_string = "William Burges (1827–81) was an English architect and designer."
my_string = my_string.replace("–", "-")# replace utf-8 symbol (ndash) to ascii (-)
print my_string
输出

William Burges (1827-81) was an English architect and designer. I am here. 

印刷是另一回事;python必须对值进行编码才能为您的控制台工作。@MichaelKazarian:这就是
print
所做的,这就是OP看到编码异常的原因。强制链接:,
William Burges (1827-81) was an English architect and designer. I am here.