구문 오류 : 함수가 '£'를 반환 할 때 파일에 ASCII가 아닌 문자 '\ xa3'
기능이 있다고 가정 해보십시오.
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는 파이썬에게 "이 파일은 순수한 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
이 인코딩에서 기술적으로 허용되지 않는 바이트 시퀀스가 없기 때문에 오류 메시지를 확실히 제거하지만 실제 인코딩이 다른 코드 인 경우 코드를 해석 할 때 완전히 잘못된 결과를 생성 할 수 있습니다. 인코딩을 선언 할 때 파일의 인코딩을 확실하게 알고 있어야합니다.
Python 2 인터프리터로 Python 3 파일을 실행하려고합니다. 현재 (2019 년 기준) python
Windows와 대부분의 Linux 배포판에 두 버전이 모두 설치된 경우 명령의 기본값은 Python 2입니다.
그러나 실제로 Python 2 스크립트를 작업하는 경우이 페이지에서 아직 언급하지 않은 솔루션은 파일을 UTF-8 + BOM 인코딩으로 다시 저장하는 것입니다. 파일 시작 부분에 3 개의 특수 바이트가 추가됩니다. 파일 인코딩에 대해 Python 인터프리터 및 텍스트 편집기에 명시 적으로 알리십시오.
'IT' 카테고리의 다른 글
문자열에서 단어 바꾸기-Ruby (0) | 2020.03.29 |
---|---|
django에서 사용자 IP 주소를 어떻게 얻습니까? (0) | 2020.03.29 |
#if RELEASE가 ## DEBUG가 C #에서하는 것처럼 작동합니까? (0) | 2020.03.29 |
이클립스 댓글 / 댓글 바로 가기? (0) | 2020.03.29 |
Java에서 "논리적 배타적"연산자 만들기 (0) | 2020.03.29 |