Python 에서 코딩을 잘하고 있다가 한글을 사용하는 경우 "SyntaxError: Non-ASCII character, but no encoding declared" 가 발생한다. 이 경우 py 파일의 최상단에 encoding type을 선언해주면 해결된다.
수정 전:
def CreateMessage(sender, to, subject, message_text):
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
try:
return {'raw': base64.urlsafe_b64encode(message.as_string())}
except:
return {'raw': base64.urlsafe_b64encode(message.as_bytes())}
if __name__ == "__main__":
print(CreateMessage("kibua20@gmail.com", "kibua20@gmail.com", "test1234한글", "messge_test1234한글"))
수정 후:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
def CreateMessage(sender, to, subject, message_text):
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
try:
return {'raw': base64.urlsafe_b64encode(message.as_string())}
except:
return {'raw': base64.urlsafe_b64encode(message.as_bytes())}
if __name__ == "__main__":
print(CreateMessage("kibua20@gmail.com", "kibua20@gmail.com", "test1234한글", "messge_test1234한글"))
에러 메시지
kibua@ubuntu-pc:~/git/% python mail_sender.py
File "mail_sender.py", line 117
SyntaxError: Non-ASCII character '\xed' in file mail_sender.py on line 117, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
coding type을 utf-8 을 추가한다. # -*- coding:utf-8 -*- 의미는 Python Interpreter에서 소스 코드가 utf8 encoding으로 작성된 것임을 알려주는 것이다. 선언하지 않으면 accii 로 설정되고, 소스 코드 상에 한글이 추가되면 accii에 없은 code 값이 있어 exeption을 발생시킨다.
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
<관련 글>
[모바일/Python] - SyntaxError: Non-ASCII character in file on, but no encoding declared
[모바일/Python] - Python 2와 3 버전 차이: a bytes-like object is required, not 'str'
[모바일/Android] - repo 실행 시 DeprecationWarning: imp module 대처법
[모바일/Android] - Android 소스 최적화 (100GB에서 65GB로 줄이기)
[모바일/Python] - [Tips] Python: XML Parsing 시 multiple elements on top level
[모바일/Python] - [Tips] Python 에서 XML comment 처리 - Sample code 제공
[모바일/Python] - [Tips] XML 에서 예약/특수 문자 처리
댓글