Python程序在Windows上失败,但在Linux上失败

Python程序在Windows上失败,但在Linux上失败,python,python-3.x,Python,Python 3.x,下面的程序在我的Windows 10机器(运行Python 3.5.2)上触发UnicodeEncodeError,但在我的Linux机器(运行Python 3.3.2)上没有任何错误 在Linux上,日志文件正确地包含: INFO:root:Antonín Dvořák 在Windows上,我遇到以下错误: 关于这种差异的可能原因有什么想法吗 您可以传递指定编码的流,而不是文件名: logging.basicConfig( stream=open('log.txt', 'w', e

下面的程序在我的Windows 10机器(运行Python 3.5.2)上触发UnicodeEncodeError,但在我的Linux机器(运行Python 3.3.2)上没有任何错误

在Linux上,日志文件正确地包含:

INFO:root:Antonín Dvořák
在Windows上,我遇到以下错误:


关于这种差异的可能原因有什么想法吗

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

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

至于原因,它可能试图使用当前区域设置的编码(根据堆栈跟踪判断为CP1252)打开目标文件。

Windows的默认编码(在您的情况下为CP1252)与Linux不同(通常为utf8),因此您必须指定所需的编码

下面的代码在Python3.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)

它的可能重复似乎是另一个问题,特别是围绕Python2上的编码/解码的问题。哦!你说得对,我一定是点击错了
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)