본문 바로가기
SW 개발/Python

Python SyntaxError: Non-ASCII character in file on, but no encoding declared

by Kibua20 2020. 6. 28.

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 에서 예약/특수 문자 처리

 




댓글