2016-08-24 3 views
4

아래의 프로그램은 Python 3.5.2를 실행하는 Windows 10 컴퓨터에서 UnicodeEncodeError를 발생 시키지만 Python 3.3.2를 실행하는 Linux 컴퓨터에서는 전혀 오류가 발생하지 않습니다.Python 프로그램이 Windows에서 실행되지만 Linux에서는 실행되지 않습니다.

#!/usr/bin/python 
import logging 
str ="Antonín Dvořák" 
logging.basicConfig(filename='log.txt', level=logging.INFO) 
logging.info(str) 

리눅스에서 로그 파일이 제대로 포함

Windows에서
INFO:root:Antonín Dvořák 

, 나는 다음과 같은 오류 얻을 :

enter image description here

모든 아이디어에 대한 원인이 될 수 있는지에를 이 불일치 때문에? 대신 파일 이름의

+1

가능한 복제 [파이썬 UTF-8 인코딩 불구 UnicodeDecodeError을 발생 "에러 = '교체' '(http://stackoverflow.com/questions/31299828/python-utf-8-encoding-throws-unicodedecodeerror -despite-errors-replace) – randomusername

+0

다른 문제 인 것처럼 보입니다. 파이썬 2에서 인코딩/디코딩을 중심으로 질문을 던집니다. – Anthony

+0

오! 네 말이 맞아, 내가 틀린 복제물을 클릭했을거야. – randomusername

답변

3

, 당신은 누구의 인코딩 지정되는 스트림을 전달할 수 : 원인에 관해서는

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

, 아마로 판단, 현재 로케일의 인코딩 (CP1252을 사용하여 대상 파일을 열하려고

스택 트레이스).

4

Windows의 기본 인코딩 (귀하의 경우 cp1252)은 Linux (일반적으로 utf8)와 다르므로 원하는 인코딩을 지정해야합니다.

아래는 파이썬 3.3 (여전히 cp1252 사용)에서 작동하지 않았지만 3.5에서 사용 되었기 때문에 3.3의 버그처럼 보입니다. 많은 Windows 텍스트 편집기가 UTF-8 BOM 서명이없는 ANSI 인코딩 (예 : cp1252)을 기본값으로 사용하기 때문에 utf-8-sig을 사용했습니다.

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) 
관련 문제