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

时间:2016-08-24 00:44:22

标签: python python-3.x

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

%a

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

<IfModule mod_rewrite.c>
  Options +FollowSymlinks
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

在Windows上,我收到以下错误:

enter image description here

关于这种差异可能导致什么原因的任何想法?

2 个答案:

答案 0 :(得分:4)

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

下面没有在Python 3.3中工作(仍然使用cp1252)但是使用3.5,所以它看起来像3.3中的错误。我使用utf-8-sig,因为许多Windows文本编辑器默认使用ANSI编码(例如cp1252)而没有UTF-8 BOM签名。

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)

答案 1 :(得分:3)

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

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

至于原因,它可能尝试使用您当前的语言环境编码打开目标文件(CP1252,通过堆栈跟踪判断)。