下面的程序在我的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上,我收到以下错误:
关于这种差异可能导致什么原因的任何想法?
答案 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,通过堆栈跟踪判断)。