복붙노트

[PYTHON] Windows의 Python 3에서 "로케일 기본 인코딩"변경

PYTHON

Windows의 Python 3에서 "로케일 기본 인코딩"변경

나는 파이썬 3을 사용하고있다. (최근 파이썬 2에서 전환했다.) 내 코드는 대개 Linux에서 실행되지만 때로는 Windows에서 실행되는 경우도 있습니다. open ()에 대한 Python 3 문서에 따르면 텍스트 파일의 기본 인코딩은 인코딩 arg가 제공되지 않은 경우 locale.getpreferredencoding ()에서 가져온 것입니다. 나는이 프로젝트가 실행 중인지에 상관없이이 프로젝트의 기본값 인 utf-8을 원한다. (현재 리눅스에서는 항상 UTF-8이지만 Windows에서는 그렇지 않다.) 이 프로젝트는 open ()에 대한 호출이 여러 번 있었기 때문에 모든 항목에 encoding = 'utf-8'을 추가하고 싶지 않습니다. 따라서 Python 3에서 볼 수 있듯이 Windows에서 로캘의 기본 인코딩을 변경하려고합니다.

이전 질문을 찾았습니다. "로케일 기본 인코딩"을 변경 했으므로 허용 된 답변을 얻었습니다. 그래서 나는 잘 할 수 있다고 생각했습니다. 그러나 유감스럽게도, 그 대답에 제안 된 명령과 첫 번째 주석은 Windows에서 저에게 작용하지 않습니다. 특히, 그 대답과 첫 번째 의견은 chcp 65001을 실행하고 PYTHONIOENCODING = UTF-8을 설정하는 것이 좋으며 두 가지를 모두 시도했습니다. 내 cmd 창에서 아래의 성적표를 참조하십시오.

> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()

> chcp 65001
Active code page: 65001

> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()

> set PYTHONIOENCODING=UTF-8

> py -i
Python 3.4.3 ...
>>> f = open('foo.txt', 'w')
>>> f.encoding
'cp1252'
>>> exit()

두 가지 제안 된 명령을 모두 사용한 후에도 내 열린 파일의 인코딩은 의도 한 utf-8 대신 cp1252입니다.

해결법

  1. ==============================

    1.python3.5.1에서이 해킹은 다음과 같이 보입니다 :

    python3.5.1에서이 해킹은 다음과 같이 보입니다 :

    import _locale
    _locale._getdefaultlocale = (lambda *args: ['en_US', 'utf8'])
    

    이후에 열리는 모든 파일은 기본 인코딩이 utf8로 간주됩니다.

  2. ==============================

    2.나는 그것의 실제 해키 임시 해결 방법을 알고 있지만 locale.getpreferredencoding () 함수를 다음과 같이 재정의 할 수있다.

    나는 그것의 실제 해키 임시 해결 방법을 알고 있지만 locale.getpreferredencoding () 함수를 다음과 같이 재정의 할 수있다.

    import locale
    def getpreferredencoding(do_setlocale = True):
        return "utf-8"
    locale.getpreferredencoding = getpreferredencoding
    

    이 파일을 일찍 실행하면 utp-8에서 열리는 모든 파일 (utp-8에서 테스트하지 않도록해야 함)이 열리고이 방법으로 모든 플랫폼에 적용됩니다.

  3. from https://stackoverflow.com/questions/31469707/changing-the-locale-preferred-encoding-in-python-3-in-windows by cc-by-sa and MIT license