기능이 있다고 가정 해보십시오.
def NewFunction():
return '£'
파운드 기호가있는 물건을 인쇄하고 싶습니다.이 프로그램을 실행하려고하면 오류가 인쇄됩니다.이 오류 메시지가 표시됩니다.
SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details
내 반환 기능에 파운드 기호를 포함시키는 방법을 알려주는 사람이 있습니까? 나는 기본적으로 클래스에서 사용하고 있으며 '__str__'
파운드 기호가 포함되어 있습니다.
답변
PEP에 오류가 있음을 읽는 것이 좋습니다. 문제는 코드에서 ASCII 인코딩을 사용하려고하지만 파운드 기호가 ASCII 문자가 아니라는 것입니다. UTF-8 인코딩을 사용해보십시오. # -*- coding: utf-8 -*-
.py 파일의 맨 위에 놓아 시작할 수 있습니다 . 더 발전시키기 위해 코드에서 문자열을 기준으로 인코딩을 정의 할 수도 있습니다. 그러나 파운드 기호 리터럴을 코드에 넣으려는 경우 전체 파일에 대해이를 지원하는 인코딩이 필요합니다.
답변
다음 두 줄을 추가하면 내 .py 스크립트 상단에 앉았습니다 (첫 번째 줄이 필요했습니다).
#!/usr/bin/env python
# -*- coding: utf-8 -*-
답변
먼저 # -*- coding: utf-8 -*-
파일의 시작 부분에 행을 추가 한 다음 u'foo'
모든 비 ASCII 유니 코드 데이터에 사용하십시오.
def NewFunction():
return u'£'
또는 Python 2.6부터 사용 가능한 마법을 사용하여 자동으로 만듭니다.
from __future__ import unicode_literals
답변
오류 메시지는 정확히 무엇이 잘못되었는지 알려줍니다. 파이썬 인터프리터는 비 ASCII 문자의 인코딩을 알아야합니다.
U + 00A3 을 반환 하려면 다음과 같이 말할 수 있습니다.
return u'\u00a3'
이것은 유니 코드 이스케이프 시퀀스를 통해 순수한 ASCII로이 문자를 나타냅니다. 리터럴 바이트 0xA3을 포함하는 바이트 문자열을 반환하려는 경우
return b'\xa3'
(파이썬 2에서는 b
암시 적이지만 명시 적은 암시 적보다 낫습니다).
오류 메시지의 링크 된 PEP는 Python에게 “이 파일은 순수한 ASCII가 아닙니다. 여기에 내가 사용중인 인코딩이 있습니다”라고 알려주는 방법을 정확하게 알려줍니다. 인코딩이 UTF-8 인 경우
# coding=utf-8
또는 이맥스 호환
# -*- encoding: utf-8 -*-
편집기에서이 파일을 저장하는 데 사용하는 인코딩을 모르는 경우 16 진 편집기 및 인터넷 검색과 같은 형식으로 검사하십시오. 스택 오버플로문자 인코딩태그에는 자세한 정보와 문제 해결 팁 이 포함 된 태그 정보 페이지 가 있습니다.
7 비트 ASCII 범위 (0x00-0x7F) 이외의 많은 단어에서 파이썬은 일련의 바이트가 나타내는 문자열을 추측 할 수 없으며 추측해서는 안됩니다. https://tripleee.github.io/8bit#a3 은 바이트 0xA3에 대한 21 가지 가능한 해석을 보여 주며 레거시 8 비트 인코딩에서만 제공됩니다. 그러나 멀티 바이트 인코딩의 첫 번째 바이트 일 수도 있습니다. 그러나 실제로는 실제로 Latin-1을 사용하고 있다고 생각하므로
# coding: latin-1
소스 파일의 첫 번째 또는 두 번째 줄로. 어쨌든 바이트가 어떤 문자를 나타내는 지 알지 못하면 인간도 이것을 추측 할 수 없습니다.
주의 사항 : coding: latin-1
이 인코딩에서 기술적으로 허용되지 않는 바이트 시퀀스가 없기 때문에 오류 메시지를 확실히 제거하지만 실제 인코딩이 다른 코드 인 경우 코드가 해석 될 때 완전히 잘못된 결과를 생성 할 수 있습니다. 인코딩을 선언 할 때 파일의 인코딩을 확실하게 알고 있어야합니다.
답변
스크립트에 다음 두 줄을 추가하면 문제가 해결되었습니다.
# !/usr/bin/python
# coding=utf-8
그것이 도움이되기를 바랍니다!
답변
Python 2 인터프리터로 Python 3 파일을 실행하려고합니다. 현재 (2019 년 기준) python
Windows와 대부분의 Linux 배포판에 두 버전이 모두 설치되어 있으면 명령의 기본값은 Python 2입니다.
그러나 실제로 Python 2 스크립트를 작업하는 경우이 페이지 솔루션에서 아직 언급하지 않은 파일은 UTF-8 + BOM 인코딩으로 파일을 다시 저장하는 것입니다. 파일 시작 부분에 3 개의 특수 바이트가 추가됩니다. 파일 인코딩에 대해 Python 인터프리터 및 텍스트 편집기에 명시 적으로 알리십시오.