본문 바로가기
Error(Exception)/ERROR-PYTHON

[python] UnicodeError

by 조조군 2024. 12. 11.
반응형

1. 오류 설명: UnicodeError

UnicodeError는 Python에서 Unicode 관련 작업 중 문제가 발생할 때 발생하는 오류입니다. 특히, 텍스트를 인코딩 또는 디코딩할 때 발생하며, 일반적으로 문자셋의 부적절한 사용 또는 지원되지 않는 문자 처리가 원인입니다. 이 오류는 다음과 같은 상황에서 주로 발생합니다:

  • 잘못된 인코딩 또는 디코딩: 파일을 읽거나 쓸 때, 잘못된 인코딩/디코딩 방식을 사용한 경우.
  • 지원되지 않는 문자: 특정 문자셋에서 표현할 수 없는 문자를 처리하려는 경우.
  • 시스템 환경 차이: OS별 기본 문자셋 차이로 인해 발생.

2. 오류 예시

(1) 잘못된 디코딩

byte_data = b'\xe4\xb8\xad\xe6\x96\x87'  # UTF-8로 인코딩된 중국어 문자열
decoded_string = byte_data.decode('ascii')  # 잘못된 인코딩으로 디코딩
# UnicodeDecodeError 발생

(2) 잘못된 인코딩

string = "안녕하세요"  # 한국어 문자열
encoded_bytes = string.encode('ascii')  # ASCII는 한국어를 지원하지 않음
# UnicodeEncodeError 발생

(3) 파일 인코딩 문제

with open("test.txt", "r", encoding="ascii") as f:
    content = f.read()  # 파일이 UTF-8로 저장되었는데 ASCII로 읽으려 함
# UnicodeDecodeError 발생

3. 오류 해결책

  1. 인코딩과 디코딩 일치시키기
    • 파일의 저장 인코딩 방식에 따라 동일한 방식으로 읽거나 쓰기.
  2. 적절한 인코딩 방식 사용
    • UTF-8은 대부분의 문자셋을 지원하므로 권장.
    • ASCII를 사용할 때는 영어만 처리할 수 있다는 점에 유의.
  3. 에러 핸들링 추가
    • errors 매개변수를 통해 에러 발생 시 무시하거나 대체 문자로 변경:
      • 'ignore': 오류를 무시
      • 'replace': 대체 문자로 변경
  4. 시스템 기본 인코딩 확인
    • Python이 사용하는 기본 인코딩 확인:
      import sys
      print(sys.getdefaultencoding())

4. 오류 예제 코드 및 해결 코드

(1) 잘못된 디코딩 해결

오류 코드
byte_data = b'\xe4\xb8\xad\xe6\x96\x87'  # UTF-8로 인코딩된 중국어 문자열
decoded_string = byte_data.decode('ascii')  # 잘못된 인코딩
# UnicodeDecodeError 발생
해결 코드
byte_data = b'\xe4\xb8\xad\xe6\x96\x87'  # UTF-8로 인코딩된 중국어 문자열
decoded_string = byte_data.decode('utf-8')  # 올바른 인코딩
print(decoded_string)  # 输出: 中文

(2) 잘못된 인코딩 해결

오류 코드
string = "안녕하세요"
encoded_bytes = string.encode('ascii')  # ASCII는 한국어를 지원하지 않음
# UnicodeEncodeError 발생
해결 코드
string = "안녕하세요"
encoded_bytes = string.encode('utf-8')  # UTF-8 사용
print(encoded_bytes)  # 출력: b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94'

(3) 파일 인코딩 문제 해결

오류 코드
with open("test.txt", "r", encoding="ascii") as f:
    content = f.read()  # 파일이 UTF-8로 저장되었는데 ASCII로 읽으려 함
# UnicodeDecodeError 발생
해결 코드
with open("test.txt", "r", encoding="utf-8") as f:  # UTF-8로 파일 읽기
    content = f.read()
print(content)

(4) 에러 무시

코드
byte_data = b'\xe4\xb8\xad\xe6\x96\x87\xff'  # UTF-8 데이터에 잘못된 바이트 포함
decoded_string = byte_data.decode('utf-8', errors='ignore')  # 오류 무시
print(decoded_string)  # 输出: 中文

결론

UnicodeError는 인코딩/디코딩 과정에서 발생하는 오류로, 오류의 원인을 파악하고 적절한 인코딩 방식을 사용하면 해결할 수 있습니다. 특히 UTF-8을 기본으로 사용하면 대부분의 문제를 피할 수 있습니다.

반응형

'Error(Exception) > ERROR-PYTHON' 카테고리의 다른 글

[python] UnicodeDecodeError  (0) 2024.12.13
[python] UnicodeEncodeError  (0) 2024.12.12
[python] UnboundLocalError  (1) 2024.12.11
[python] TypeError  (0) 2024.12.10
[python] SystemExit  (1) 2024.12.09

댓글