English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python 파일 인코딩 설정 구현 방법

python에서2py 파일에 중국어를 쓰려면, 파일 인코딩을 선언하는 줄을 추가해야 합니다. 그렇지 않으면 python2ASCII 인코딩을 기본적으로 사용합니다. (python3이 문제는 더 이상 없습니다, python3기본 파일 인코딩은 UTF입니다-8)

인코딩 주석을 첫 번째 줄이나 두 번째 줄에 두어야 합니다. 일반적으로 Python 파일의 처음 두 줄은 다음과 같아야 합니다:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

첫 번째 줄은 python 인터프리터를 지정하며, 두 번째 줄은 python 파일 인코딩 방식을 지정합니다. 인코딩 방식을 설정하는 데는 다음과 같은 선택 사항이 있습니다:

1. 등호를 포함한 설정 방법:

#!/usr/bin/python
# coding=<encoding name>

2. 가장 일반적인 경우,冒號을 포함한(대부분의 편집기에서 올바르게 인식됨):

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

3. vim의 :}

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

헤더의 인코딩 선언은 다음과 같은 역할을 합니다:

코드에 중국어 주석이 있을 때는 이 선언이 필요합니다

보다 고급된 편집기(예: 제 emacs)는 헤더 선언을 기반으로 이를 코드 파일의 형식으로 인식합니다.

프로그램은 헤더 선언을 통해 '인생이 짧다'와 같은 유니코드 객체를 디코딩 초기화하며, 이렇게 합니다. (따라서 헤더 선언과 코드 저장 형식은 일치해야 합니다)

기본 디코딩 형식 설정

import sys  # sys 모듈 가져오기, sys의 첫 번째 로드는 아닙니다 
reload(sys) # sys 재로드 
sys.setdefaultencoding('utf8## setdefaultencoding 함수 호출

여기서 특히 중요한 것은 두 번째 줄의 reload(sys)입니다. 이는 절대 빠지지 않아야 합니다. 그렇지 않으면 올바르게 실행되지 않습니다. 그렇다면 왜 재로드를 해야 하는지, 그대로 가져오면 함수를 호출할 수 없는 이유는 무엇인가요? setdefaultencoding 함수가 시스템 호출 후 제거되기 때문에, import를 통해 가져올 때 이미 없어졌기 때문입니다. 따라서 sys 모듈을 재로드해야 합니다. 이렇게 하면 setdefaultencoding이 사용 가능해지고, 코드에서 인터프리터의 현재 문자 인코딩을 변경할 수 있습니다.

파이썬 설치 디렉토리의 Lib 폴더에 site.py라는 파일이 있으며, 그 안에서 main() -> setencoding() -> sys.setdefaultencoding(encoding)를 찾을 수 있습니다. 이 site.py는 파이썬 인터프리터를 시작할 때마다 자동으로 로드되기 때문에, main 함수는 항상 실행됩니다. setdefaultencoding 함수가 나오면 바로 제거됩니다.

sys.defaultencoding에 대해, 디코딩 방식을 명확히 지정하지 않았을 때 사용됩니다. 예를 들어, 다음과 같은 코드가 있습니다:

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' # 이处的 str은 유니코드가 아닌 str 형식입니다 
s.encode('gb18030') 

이 코드는 s를 다시 gb로 인코딩합니다.18030의 형식으로, 즉 유니코드 -str 형식으로 인코딩합니다. s 자체가 str 형식이기 때문에

파이썬은 자동으로 s를 유니코드로 디코딩한 후, 그것을 gb18030. 디코딩은 파이썬이 자동으로 수행되기 때문에, 우리는 디코딩 방식을 지정하지 않았기 때문에, 파이썬은 sys.defaultencoding을 지정된 방식으로 디코딩합니다. 많은 경우 sys.defaultencoding은

ASCII, s가 이 유형이 아니면 오류가 발생합니다. 위의 경우를 보면, 제 sys.defaultencoding은 ASCII이며, s의 인코딩 방식과 파일의 인코딩 방식이 일치합니다. UTF입니다.8 의, 따라서 오류가 발생했습니다:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 위치 
0: ordinal not in range(128) 

이러한 경우, 오류를 수정하기 위해 두 가지 방법이 있습니다:

첫 번째는 s의 인코딩 방식을 명확히 지정합니다

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' 
s.decode('utf-8).encode('gb18030') 

두 번째는 sys.defaultencoding을 파일 인코딩 방식으로 변경합니다

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
import sys 
reload(sys) # Python2.5 초기화 후 sys.setdefaultencoding 이 메서드는 제거됩니다. 다시 로드해야 합니다 
sys.setdefaultencoding('utf-8 
str = '中文' 
str.encode('gb18030')

이번에 공유한 python 설정 파일 인코딩 형식 구현 방법이 모든 내용입니다. 여러분에게 참고가 되길 바라며, 노래教程에 많은 지지를 부탁드립니다.

언급: 본문은 인터넷에서 가져온 것이며, 원저자에게 독점적 권리가 있습니다. 본문은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 웹사이트는 소유권을 가지지 않으며, 인공 편집을 하지 않았으며, 관련 법적 책임을 부담하지 않습니다. 저작권 문제가 있을 경우 notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com에 (보내는 이메일에서 #을 @으로 변경하십시오) 신고하시고 관련 증거를 제공하시면, 확인된 후 해당 부분이 즉시 삭제됩니다.

추천해드립니다