Python UnicodeDecodeError: ASCII 코덱이 위치의 바이트를 디코딩할 수 없음: 범위에 없는 서수

Abid Ullah 2023년6월21일
  1. Python의 유니코드 디코드 오류
  2. Python에서 유니코드 디코드 오류를 해결하는 방법
Python UnicodeDecodeError: ASCII 코덱이 위치의 바이트를 디코딩할 수 없음: 범위에 없는 서수

이 기사에서는 코드 실행 중 발생하는 UnicodeDecodeError를 해결하는 방법에 대해 알아봅니다. 이 오류가 발생하는 여러 가지 이유를 살펴보겠습니다.

또한 Python에서 이 오류를 해결하는 방법을 찾을 것입니다. Python에서 UnicodeDecodeError가 무엇인지부터 시작하겠습니다.

Python의 유니코드 디코드 오류

반복되는 UnicodeDecodeError에 직면하고 있으며 왜 발생하는지 또는 해결 방법이 확실하지 않은 경우 이 문서가 적합합니다.

이 문서에서는 이 오류가 발생하는 이유와 이를 해결하는 간단한 방법에 대해 자세히 설명합니다.

Python에서 유니코드 디코드 오류의 원인

Python에서 UnicodeDecodeError는 한 종류의 코덱을 사용하여 이 코덱을 사용하여 인코딩되지 않은 바이트를 디코딩하려고 시도할 때 나타납니다. 좀 더 구체적으로 말하자면 자물쇠와 열쇠 비유를 통해 이 문제를 이해해 봅시다.

해당 잠금을 위해 특별히 만들어진 고유 키를 통해서만 열 수 있는 잠금을 만들었다고 가정합니다.

이 자물쇠용으로 만들어지지 않은 열쇠로 이 자물쇠를 열려고 하면 어떻게 될까요? 그것은 맞지 않을 것입니다.

다음 내용으로 example.txt 파일을 생성해 보겠습니다.

𝘈Ḇ𝖢𝕯٤ḞԍНǏ
hello world

다음 코드를 사용하여 ascii 코덱을 사용하여 이 파일을 디코딩해 보겠습니다.

예 1:

with open("example.txt", "r", encoding="ascii") as f:
    lines = f.readlines()
    print(lines)

코드 출력:

Traceback (most recent call last):
  File "/home/fatina/PycharmProjects/examples/main.py", line 2, in <module>
    lines = f.readlines()
  File "/usr/lib/python3.10/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)

하나의 코덱을 사용하여 문자열을 인코딩하고 다른 코덱을 사용하여 디코딩할 때 어떤 일이 발생하는지에 대한 또 다른 간단한 예를 살펴보겠습니다.

예 2:

string = "𝘈Ḇ𝖢𝕯٤ḞԍНǏ"
encoded_string = string.encode("utf-8")
decoded_string = encoded_string.decode("ascii")
print(decoded_string)

이 예제에는 utf-8 코덱을 사용하여 인코딩된 문자열이 있고 다음 줄에서는 ascii 코덱을 사용하여 이 문자열을 디코딩하려고 시도합니다.

코드 출력:

Traceback (most recent call last):
  File "/home/fatina/PycharmProjects/examples/main.py", line 4, in <module>
    decoded_string = encoded_string.decode('ascii')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 0: ordinal not in range(128)

이는 예제 1의 파일 내용과 예제 2의 문자열이 ascii 코덱을 사용하여 인코딩되지 않았지만 이를 사용하여 이러한 스크립트를 디코딩하려고 시도했기 때문에 발생합니다. 그 결과 UnicodeDecodeError가 발생합니다.

Python에서 유니코드 디코드 오류를 해결하는 방법

이 문제를 해결하는 것은 다소 간단합니다. Python 문서를 살펴보면 바이트를 디코딩하는 데 도움이 되는 몇 가지 표준 코덱을 볼 수 있습니다.

따라서 위의 예제 코드에서 asciiutf-8 코덱으로 대체했다면 example.txt의 바이트를 성공적으로 디코딩했을 것입니다.

예제 코드:

with open("example.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
    print(lines)

코드 출력:

['𝘈Ḇ𝖢𝕯٤ḞԍНǏ\n', 'hello world']

두 번째 예의 경우에도 동일한 작업을 수행하기만 하면 됩니다.

예제 코드:

string = "𝘈Ḇ𝖢𝕯٤ḞԍНǏ"
encoded_string = string.encode("utf-8")
decoded_string = encoded_string.decode("utf-8")
print(decoded_string)

코드 출력:

𝘈Ḇ𝖢𝕯٤ḞԍНǏ

때때로 문자열이 하나의 코덱을 사용하여 완전히 디코딩되지 않을 수 있다는 점을 언급하는 것이 중요합니다.

따라서 필요한 경우 다음과 같이 단순히 ignore 인수를 추가하여 디코딩할 수 없는 문자를 무시하도록 프로그램을 개발할 수 있습니다.

with open("example.txt", "r", encoding="utf-8", errors="ignore") as f:
    lines = f.readlines()
    print(lines)

이렇게 하면 일부 문자를 디코딩하는 동안 컴파일러에서 발생하는 모든 오류를 건너뛸 수 있지만 이로 인해 데이터 손실이 발생할 수 있다는 점을 언급하는 것이 중요합니다.

이 기사가 Python에서 UnicodeDecodeError를 해결하는 방법을 이해하는 데 도움이 되기를 바랍니다.

작가: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn

관련 문장 - Python Error