2017-12-11 1 views
0

이것은 특정한 질문이 아니라 일반적인 질문입니다 : 다른 플랫폼에서 파이썬이 유니 코드를 처리하는 방법에 차이점이 있습니까?다른 플랫폼에서 파이썬이 유니 코드를 처리하는 방법에 차이점이 있습니까?

파이썬 3을 사용하여 텍스트 파일을 읽습니다. 다음 코드는 파일을 열고 첫 번째 행을 건너 뜁니다.

fin = open(filename, 'rt') 
next(fin) 

Linux 컴퓨터와 Mac에서 동일한 코드를 실행합니다. 동일한 environment.yml 파일을 사용하여 만든 conda 환경을 사용합니다. 또한 두 컴퓨터에서 동일한 Python 버전을 사용하고 있음을 확인했습니다 (Python 3.6.3 :: Anaconda, Inc.). 데이터 파일은 동일한 Git 저장소에서 가져옵니다. 어떤 이유로 Linux 버전에서 예외가 발생합니다.

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 139: ordinal not in range(128) 
+0

것들 확인 : 만약 당신이 좋아하면, 그래서 그냥,이 작업을 수행 할 수 있습니다 당신이 정말로 파이썬 3, 무엇을 사용하고 있는지 않습니다 ['locale.getpreferredencoding'(거짓)] (HTTPS : //docs.python .org/3/library/functions.html # open)은 실패한 플랫폼에서 제공합니다. "텍스트 모드에서 * encoding *을 지정하지 않으면 사용되는 인코딩은 플랫폼에 따라 다릅니다. 현재 로캘 인코딩을 얻으려면'locale.getpreferredencoding (False)'가 호출됩니다." 데이터 파일을 제어하는 ​​것처럼 보이기 때문에 사용할 인코딩을 선택하고 파일을 열 때이를 명시 적으로 'open()'에 전달하십시오. –

+2

'명시 적 암시 적보다 낫다 '. 텍스트 파일을 다룰 때 좋은 BKM은 항상'open'에서 인코딩을 지정합니다. –

답변

-1

인코딩은 Python이 아니라 LOCALE 변수에 따라 다릅니다.

UTF-8 로켈을 사용하지 않는 것 같습니다. 당신은 US-ASCII

처럼 리눅스 시스템 무언가에있는 동안 어떻게 그것을 해결하기 위해, Mac에서하는이 UTF-8을 반환해야

import locale 
print(locale.getpreferredencoding(False))' 

으로 사용되는 로케일 파이썬 확인할 수 있습니까? 대부분의 시스템에서

, 로케일이 the POSIX locale documentation

문제가 해결됩니다 .bash_profile 또는 동등한 LC_ALL=en.UTF-8 추가를 참조 환경 변수 (에서 가져

2

the python3 docs for the open() builtin에서 :.

... 텍스트 모드에서 ... 파일의 내용은 str으로 반환되며, 바이트는 a를 사용하여 먼저 디코드되었습니다. 플랫폼에 따라 인코딩 또는 주어진 경우 지정된 인코딩를 사용하여이 ... 기본 인코딩은

당신에게 로케일 LIB에 의해보고 된 기본 인코딩이 인 것을 확실 ... 플랫폼에 의존 (어떤 locale.getpreferredencoding() 반환)입니다 두 플랫폼에서 동일합니까? 당신은 다음과 같이 텍스트 파일에서 읽기위한 인코딩을 적용 할 수 있습니다 :

fin = open(filename, 'r', encoding='utf-8') 
next(fin) 

기본 파일 모드를 읽기 위해 t은 가정대로, 파일 모드 rt 필요하지 않습니다 참고; 사실 기본 모드이므로 r이 필요하지 않습니다.

fin = open(filename, encoding='utf-8') 
+0

''r''이 기본값이며 아무 것도 필요하지 않습니다^^ –

+0

nice - answer amended! –

관련 문제