파이썬 소스 코드 인코딩을 정의하는 올바른 방법 보았습니다. #!/usr/bin/python # -*-

PEP 263 은 Python 소스 코드 인코딩을 선언하는 방법을 정의합니다.

일반적으로 파이썬 파일의 처음 두 줄은 다음으로 시작해야합니다.

#!/usr/bin/python
# -*- coding: <encoding name> -*-

그러나 나는 다음으로 시작하는 많은 파일을 보았습니다.

#!/usr/bin/python
# -*- encoding: <encoding name> -*-

=> 코딩 대신 코딩 .

그렇다면 파일 인코딩을 선언하는 올바른 방법은 무엇입니까?

되어 인코딩하는 데 사용되는 정규식 게으른 때문에 허용? 아니면 파일 인코딩을 선언하는 또 다른 형태입니까?

PEP는 인코딩 에 대해 이야기하지 않고 코딩에 대해서만 이야기하기 때문에이 질문을 하고 있습니다 .



답변

여기 에서 문서를 확인 하십시오 .

“Python 스크립트의 첫 번째 또는 두 번째 행에있는 coding[=:]\s*([-\w.]+)주석이 정규식과 일치하면 이 주석은 인코딩 선언으로 처리됩니다.”

“이 표현의 권장 형태는

# -*- coding: <encoding-name> -*-

이것은 GNU Emacs에서도 인정합니다.

# vim:fileencoding=<encoding-name>

Bram Moolenaar의 VIM에 의해 인식됩니다. “

따라서 “코딩”부분 앞에는 거의 모든 것을 넣을 수 있지만 100 % python-docs-recommendation-compatible가 되려면 “코딩”(접두사가없는)을 고수하십시오.

보다 구체적으로, 파이썬이 인식하는 모든 것을 사용하고 사용 하는 특정 편집 소프트웨어 (아무것도 필요로하는 경우) 를 사용해야 합니다. 예를 들어, coding폼은 GNU Emacs에 의해 인식되지만 Vim은 인식하지 못합니다 (예, 보편적 인 합의가 없다면 본질적으로 잔디 전쟁입니다 ).


답변

PEP 263 :

첫 번째 또는 두 번째 행은 정규식 “coding [: =] \ s * ([-\ w.] +)”와 일치해야합니다.

따라서 “en coding : UTF-8 “이 일치합니다.

PEP는 몇 가지 예를 제공합니다.

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

 

# This Python file uses the following encoding: utf-8
import os, sys

답변

프로그램 상단에 아래 문장을 복사하면 문자 인코딩 문제가 해결됩니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

답변

오늘 기준 — 2018 년 6 월


PEP 263 자체는 다음과 같은 정규 표현식을 언급합니다.

소스 코드 인코딩을 정의하려면 다음과 같이 매직 주석을 파일의 첫 번째 또는 두 번째 행으로 소스 파일에 배치해야합니다.

# coding=<encoding name>

또는 (인기있는 편집자가 인식하는 형식 사용) :

#!/usr/bin/python
# -*- coding: <encoding name> -*-

또는:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> : 

보다 정확하게는 첫 번째 또는 두 번째 줄은 다음 정규식과 일치해야합니다.

^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)

따라서 이미 다른 답변에 의해 요약 된 것처럼 coding모든 접두사와 일치 하지만 PEP를 준수하려는 경우 (내가 말할 수있는 한, encoding대신 사용 하는 coding것이 위반되지 않습니다) PEP 263)) — coding접두사없이 ‘plain’을 사용하십시오.


답변

내가 실수하지 않으면 소스 파일 인코딩에 대한 원래 제안은 첫 두 줄에 정규 표현식을 사용하는 것이 었습니다.

나는 정규식이 무언가를 따르는 줄에 따른 것이라고 생각합니다 coding:.

나는 이것을 발견했다 : http://www.python.org/dev/peps/pep-0263/
이것은 원래의 제안이지만, 그들이 한 일을 정확하게 나타내는 최종 사양을 찾을 수없는 것 같습니다.

나는 분명히 encoding:큰 효과를 보았으므로 분명히 효과가 있습니다.

duhcoding: ...잘 작동하는지 확인하기 위해 완전히 다른 것으로 변경 하십시오.


답변

나는 그것이 Ruby와 비슷하다고 생각합니다-어느 쪽이든 괜찮습니다.

텍스트 편집기마다 서로 다른 마킹 인코딩 방법 (즉,이 두 가지)을 사용하기 때문입니다.

루비를 사용하면 첫 번째 줄이나 두 번째 줄에 다음과 일치하는 문자열이 포함됩니다.

coding: encoding-name

그 줄에 공백과 다른 보풀을 무시합니다. (이것은 종종 : 대신 = 일 수도 있습니다).