Python:打印重音字符时的UnicodeEncodeError

时间:2016-09-24 08:51:14

标签: python unicode utf-8 decode encode

使用Python 2.7.11

#!/usr/bin/python
# -*- coding: utf-8 -*-
print 'ÁÉŐÜŐ'
print u'ÁÉÖÜŐ'

具有以下结果:

ÁÉŐÜŐ
    Traceback (most recent call last):
        File "C:\Users\RaseR\Desktop\testing.py", line 4, in <module>
            print u'ÁÉÖÜŐ'
        File "C:\Python27\lib\encodings\cp850.py", line 12, in encode
            return codecs.charmap_encode(input,errors,encoding_map)
    UnicodeEncodeError: 'charmap' codec can't encode character u'\u0150' in 
    position 4: character maps to <undefined>

如有必要:

Notepad ++,编码为UTF-8

带有Lucida控制台字体的Windows 10控制台

1 个答案:

答案 0 :(得分:-1)

当您print时,您正在打印到标准输出。标准输出使用一些编码,所有内容都必须转换为该编码。

就我而言:

>>> sys.stdout.encoding
'cp852'
>>> u'\u0150'.encode(sys.stdout.encoding)
'\x8a'
>>> print u'\u0150'
Ő
>>> print '\x8a'
Ő

在您的情况下,似乎st字符在stdout使用的编码中不存在,因此转换失败。没有办法打印出来。

您可以手动编码,指定如何处理无法编码的字符:

>>> print u'\u0150'.encode(sys.stdout.encoding, 'replace')
Ő

使用无法编码的字符:

>>> print u'\u0150\u1234'.encode(sys.stdout.encoding, 'replace')
Ő?