programing

Python 소스 코드 인코딩을 정의하는 올바른 방법

i4 2023. 6. 25. 18:23
반응형

Python 소스 코드 인코딩을 정의하는 올바른 방법

PEP 263은 Python 소스 코드 인코딩을 선언하는 방법을 정의합니다.일반적으로 Python 파일의 처음 두 줄은 다음으로 시작해야 합니다.

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

하지만 다음으로 시작하는 많은 파일을 보았습니다.

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

즉,encoding보다는coding.

파일 인코딩은 어떻게 선언해야 합니까?


누락되거나 잘못된 인코딩 선언으로 인해 발생하는 구문 오류에 대한 중복 질문을 닫으려면 "SyntaxError: ASCII가 아닌 문자..." 또는 "SyntaxError: Non-UTF-8 code with..."를 사용하십시오.반면 이 질문은 선언문이 어떻게 작성되는지, 그리고 그것이 필요한지에 대한 질문의 표준입니다.

다음 문서를 확인하십시오.

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

"이 표현의 권장되는 형태는

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

이는 GNU Emacs에서도 인정받고 있으며,

# vim:fileencoding=<encoding-name>

그것은 Bram Moolenaar의 VIM에 의해 인식됩니다."

따라서 "코딩" 부분 앞에 거의 모든 것을 넣을 수 있지만 100% python-docs-recommendation-compatible을 원한다면 "코딩"(접두사 없음)을 고수합니다.

좀 더 구체적으로 말하면, Python이 인식하는 모든 것과 사용하는 특정 편집 소프트웨어를 사용해야 합니다(필요한 것이 있거나 수락하는 경우).예를 들면coding형태는 GNU Emacs에 의해 인식되지만 Vim은 인식되지 않습니다(그렇습니다, 보편적인 합의 없이는 본질적으로 영역 전쟁입니다).

PEP 263:

첫 번째 줄 또는 두 번째 줄은 정규식 "filename[:=]\s*([-\w.]+)"과 일치해야 합니다.

그래서 "인코딩: 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를 준수하고 싶다면 (내가 말할 수 있는 한, 사용하는 것.encodingcoding어떤 식으로든 PEP 263을 위반하지 않음) - '일반'을 고수합니다.coding접두사가 없는

루비와 비슷한 것 같아요. 어느 방법이든 괜찮아요.

이는 주로 다른 텍스트 편집기가 서로 다른 방식(즉, 이 두 가지)의 표시 인코딩을 사용하기 때문입니다.

Ruby의 경우 첫 번째 또는 두 번째(쉐방 라인이 있는 경우) 길이가 다음과 일치하는 문자열을 포함합니다.

coding: encoding-name

그리고 그 선들에 있는 공백이나 다른 솜털들을 무시합니다.(또한 :, 대신 =일 수도 있습니다.)

내가 틀리지 않았다면, 원본 파일 인코딩에 대한 원래 제안은 처음 두 줄에 정규식을 사용하는 것이었고, 이는 두 줄 모두를 허용할 것입니다.

정규식은 다음과 같은 것이었다고 생각합니다.coding:그 뒤에 뭔가가 있습니다.

저는 이것을 찾았습니다: http://www.python.org/dev/peps/pep-0263/ 이것은 원래 제안이지만, 저는 그들이 정확히 무엇을 했는지를 나타내는 최종 사양을 찾을 수 없는 것 같습니다.

나는 확실히 사용해 왔습니다.encoding:큰 효과가 있기 때문에, 분명히 그것은 효과가 있습니다.

완전히 다른 것으로 바꿔보세요, 예를 들면duhcoding: ...그것이 제대로 작동하는지 확인하기 위해.

언급URL : https://stackoverflow.com/questions/728891/correct-way-to-define-python-source-code-encoding

반응형