Unicode错误Python3日历模式

时间:2015-12-23 08:53:52

标签: python python-3.x unicode encoding console

我正在尝试从python calendar模块打印一个简单的日历:

import calendar

c = calendar.LocaleTextCalendar(0, 'Russian')
s = c.formatmonth(2016, 5)
print(s)

在Linux上运行良好,但在Windows上我遇到错误: UnicodeEncodeError: 'charmap' codec can't encode characters in position 4-10: character maps to <undefined>

我所能做的就是避免错误print(s.encode('ascii', 'replace').decode('ascii'))(错过了区域设置文本值),所以我对常见的解决方案感兴趣。

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是因为Windows控制台编码不是Unicode。不幸的是,这不是微不足道的,有几种方法可以解决这个问题。

您的控制台的编码是什么?你可以用这种方式找到Python

import sys
sys.stdin.encoding

您可以尝试仅以当前控制台的方式设置Unicode:

chcp 65001
python myScript.py

在您的脚本中确保您的字符串被编码为UTF-8。

答案 1 :(得分:1)

我解决了以下问题:

import platform

if platform.system() == 'Windows':
    import locale
    locale.setlocale(locale.LC_ALL, "Russian")

...
print(s) # Works!

另一个选项是打印内部的编码/解码:

print(s.encode('cp1252').decode('cp1251'))

这两种情况也适用于文件输出。