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 문서를 살펴보면 바이트를 디코딩하는 데 도움이 되는 몇 가지 표준 코덱을 볼 수 있습니다.
따라서 위의 예제 코드에서 ascii
를 utf-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
를 해결하는 방법을 이해하는 데 도움이 되기를 바랍니다.
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
- AttributeError 수정: Python에서 'generator' 객체에 'next' 속성이 없습니다.
- AttributeError 해결: 'list' 객체 속성 'append'는 읽기 전용입니다.
- AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
- AttributeError: 'Dict' 객체에 Python의 'Append' 속성이 없습니다.
- AttributeError: 'NoneType' 객체에 Python의 'Text' 속성이 없습니다.
- AttributeError: Int 객체에 속성이 없습니다.