【问题标题】:Python: UnicodeEncodeError when printing accented charactersPython:打印重音字符时出现UnicodeEncodeError
【发布时间】:2017-02-02 02:53:11
【问题描述】:

使用 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>

如有必要:

使用 UTF-8 编码的记事本++

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

【问题讨论】:

  • 它在 IDLE ide 中对我来说工作正常..
  • 您的控制台似乎使用的是codepage 850,而不是UTF-8。你需要改变它。
  • 在搜索“[python] print UnicodeEncodeError”时,您是否检查过stackoverflow 上的一些命中?
  • @mkiever 是的,我做到了。
  • @PM2Ring 是的,我的控制台正在使用 cp850。但是如果我把它改成 cp65001 效果很好,除了在其他电脑上。

标签: python unicode utf-8 decode encode


【解决方案1】:

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

就我而言:

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

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

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

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

带有无法编码的字符:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 2013-08-29
    • 2019-10-09
    • 2018-01-21
    • 2016-06-30
    • 2018-08-09
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多