Python 3에서 인코딩 선언을 사용해야합니까?


114

Python 3은 기본적으로 소스 코드 파일에 UTF-8 인코딩을 사용합니다. 모든 소스 파일의 시작 부분에 인코딩 선언을 사용해야합니까? 처럼# -*- coding: utf-8 -*-

답변:


112

기본값 UTF-8 에서 벗어나거나 해당 정보를 사용하기 위해 다른 도구 (예 : IDE 또는 텍스트 편집기)에 의존하는 경우에만 해당 선언을 사용해야합니다.

즉, 파이썬에 관한 한 한 다른 인코딩을 사용하려는 경우에만 해당 선언을 사용해야합니다.

편집기와 같은 다른 도구는 유사한 구문을 지원할 수 있습니다. 이것이 PEP 263 사양 이 구문에서 상당한 유연성을 허용 하는 이유입니다 (주석 coding이어야 하고 텍스트가 있어야하며 그 뒤에 a :또는 =문자 및 선택적 공백이 와야합니다. 다음에 인식 된 코덱).

파이썬 이 소스 코드를 읽는 방법에만 적용됩니다 . 해당 코드 실행에는 적용되지 않으므로 인쇄, 파일 열기 또는 기타 I / O 작업이 바이트와 유니 코드간에 변환되는 방식에는 적용되지 않습니다. Python, Unicode 및 인코딩에 대한 자세한 내용은 Python Unicode HOWTO 또는 Ned Batchelder 의 매우 철저한 실용적 유니 코드 강연 을 읽어 보시기 바랍니다 .


28
# -*- coding: utf-8 -*-일부 편집자로 전환 여전히 유용 할 수있는 소스 파일을 편집 할 때 인코딩 예상했다.
pepr

1
@pepr 바이트 순서 표시도 똑같이 할 수 있습니다.
endolith

12
@endolith : UTF-8 BOM은 마이크로 소프트가 만든이 지구상에서 혐오스러운 존재입니다. en.wikipedia.org/wiki/Byte_order_mark#UTF-8
Martijn Pieters

1
@MartijnPieters 귀하의 링크는 당신과 동의하지 않는 것
endolith

2
@endolith : 아니요, WP 기사는 배경을 요약 할 뿐이며, 그것이 혐오스러운 것이라고 생각합니다. BOM의 요점은 바이트 순서를 기록하는 것입니다 (따라서 이름, Byte Order Mark). UTF-8에는 바이트 순서 혼동이 없으며 UTF-16 및 UTF-32에서만 해당 기능이 있습니다. 값은 이미 용도가 변경된 제로 너비 중단 공백 문자입니다 (우연한 인쇄로 인해 완전히 보이지 않는 출력으로 끝남).이를 마법 상수로 재사용하는 것은 제 생각에 잘못되었습니다.
Martijn Pieters

6

아니요, 다음과 같은 경우 :

  • 전체 프로젝트 UTF-8는 기본값 인 만 사용합니다 .
  • 그리고 IDE 도구가 각 파일에서 인코딩 선언을 필요로하지 않는다는 것을 확신합니다.

예, 만약

  • 프로젝트는 다른 인코딩에 의존합니다.
  • 또는 많은 인코딩에 의존합니다.

다중 인코딩 프로젝트의 경우 :

일부 파일이으로 인코딩 된 경우에서 인코딩 된 경우 non-utf-8에도 UTF-8인코딩 선언도 추가해야합니다.Explicit is better than implicit.

참고:

  • PyCharm에는 다음과 같은 선언이 필요하지 않습니다.

pycharm의 특정 파일에 대한 인코딩 구성

  • vim에는 해당 선언이 필요하지 않지만 다음과 같습니다.
# vim: set fileencoding=<encoding name> :
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.