다른 사람들이 말했듯 # coding:
이 소스 파일이 저장되는 인코딩을 지정합니다. 다음은이를 설명하는 몇 가지 예입니다.
디스크에 cp437 (내 콘솔 인코딩)로 저장되었지만 인코딩이 선언되지 않은 파일
b = 'über'
u = u'über'
print b,repr(b)
print u,repr(u)
산출:
File "C:\ex.py", line 1
SyntaxError: Non-ASCII character '\x81' in file C:\ex.py on line 1, but no
encoding declared; see http://www.python.org/peps/pep-0263.html for details
# coding: cp437
추가 된 파일의 출력 :
über '\x81ber'
über u'\xfcber'
처음에 파이썬은 인코딩을 몰랐고 비 ASCII 문자에 대해 불평했습니다. 인코딩을 알고 나면 바이트 문자열은 실제로 디스크에 있던 바이트를 얻습니다. 유니 코드 문자열의 경우 Python은 \ x81을 읽고 cp437에서 ü 라는 것을 알고 U + 00FC 인 ü 에 대한 유니 코드 코드 포인트로 디코딩했습니다 . 바이트 문자열이 인쇄 될 때 Python은 16 진수 값 81
을 콘솔에 직접 보냈습니다 . 유니 코드 문자열이 인쇄 될 때, 파이썬은 제대로 CP437로 내 콘솔 인코딩을 감지 유니 코드 변환 ü를 위한 CP437 값 ü .
UTF-8로 선언되고 저장된 파일은 다음과 같습니다.
├╝ber '\xc3\xbcber'
über u'\xfcber'
UTF-8에서 ü 는 16 진수 바이트로 인코딩 C3 BC
되므로 바이트 문자열에 해당 바이트가 포함되지만 유니 코드 문자열은 첫 번째 예와 동일합니다. 파이썬은 2 바이트를 읽고 올바르게 디코딩했습니다. 파이썬은 ü를 나타내는 두 개의 UTF-8 바이트 를 내 cp437 콘솔로 직접 보냈기 때문에 바이트 문자열을 잘못 인쇄했습니다 .
여기서 파일은 cp437로 선언되었지만 UTF-8로 저장됩니다.
├╝ber '\xc3\xbcber'
├╝ber u'\u251c\u255dber'
바이트 문자열은 여전히 디스크에 바이트 (UTF-8 hex bytes C3 BC
)를 가지고 있지만, 단일 UTF-8 인코딩 문자 대신 두 개의 cp437 문자로 해석했습니다. 유니 코드 코드 포인트로 변환 된 두 문자와 모든 것이 잘못 인쇄됩니다.
# coding: utf8
충분히 좋은, 필요없이입니다-*-