Python程序在Windows上失败,但在Linux上没有问题

4
下面的程序在我的Windows 10机器上触发了UnicodeEncodeError(运行Python 3.5.2),但在我的Linux机器上(运行Python 3.3.2)没有任何错误。
#!/usr/bin/python
import logging
str ="Antonín Dvořák"
logging.basicConfig(filename='log.txt', level=logging.INFO)
logging.info(str)

在Linux系统中,日志文件正确地包含了以下内容:
INFO:root:Antonín Dvořák

在Windows上,我收到以下错误:enter image description here 有什么可能导致此差异的想法吗?

似乎是一个不同的问题,特别是围绕Python 2上的编码/解码问题。 - Anthony
哦!你说得对,我一定点错了重复项。 - randomusername
2个回答

4
在 Windows 中,默认编码是 cp1252,而在 Linux 中通常是 utf8,因此您需要指定所需的编码。
以下内容在 Python 3.3 中无法正常工作(仍使用 cp1252),但在 3.5 中可以,因此看起来是 3.3 中的一个 bug。我使用了 utf-8-sig,因为许多 Windows 文本编辑器默认使用没有 UTF-8 BOM 签名的 ANSI 编码(如 cp1252)。
import logging
str ="Antonín Dvořák"
with open('log.txt','w',encoding='utf-8-sig') as s:
    logging.basicConfig(stream=s, level=logging.INFO)
    logging.info(str)

3

您可以传递一个指定编码的流,而不是文件名:

logging.basicConfig(
    stream=open('log.txt', 'w', encoding='utf-8'),
    level=logging.INFO
)

关于原因,可能是尝试使用当前所在区域设置的编码(通过堆栈跟踪判断为CP1252)打开目标文件导致的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接