Python에서 유니코드를 ASCII로 변환

Salman Mehmood 2024년2월15일
Python에서 유니코드를 ASCII로 변환

이 기사에서는 유니코드를 바이트로 인코딩하는 방법, 시스템을 인코딩하는 다양한 방법, Python에서 유니코드를 ASCII로 변환하는 방법을 배웁니다.

Python에서 유니코드를 ASCII로 변환

Python 3 문자열의 기본 문제는 문자로 구성됩니다. Python에는 문자 유형이 없지만 유니코드 문자가 포함되어 있습니다.

a = 'abcd'라고 말하고 len() 함수를 사용하여 길이를 확인하면 4를 얻고 s='שלום'를 선언합니다. 히브리어. 이 길이는 같을 것입니다. 두 변수 모두 4개의 문자를 가지고 있기 때문에 좋습니다.

>>a='abcd'
>>len(a)
4
>>s='שלום'
>>len(s)
4

배후에서 다른 바이트 수가 있다는 사실은 여기서 이 질문과 관련이 없습니다. len()은 문자 수를 측정하고 있지만 바이트 수가 아니라 물론 배후에서 UTF-8 유니코드입니다. 문자 및 UTF-8 인코딩은 더 많은 바이트를 사용합니다.

그런 다음 문자열을 필요한 바이트로 어떻게 바꿀 수 있습니까? 글쎄, 우리는 s.encode()를 사용할 수 있으며, 이렇게 하면 히브리어로 שלום라는 단어를 만드는 데 필요한 8바이트가 되는 바이트 문자열을 반환합니다.

>>s.encode()
b'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'
>>'abcd'.encode()
b'abcd'

이제 우리는 유니코드 문자열을 취하여 바이트 문자열로 바꿀 것이지만, 이 문자열 שלום이 무엇인지 알고 있고 유니코드의 기본 바이트를 나타내지 않는 바이트를 다시 가져오고 싶기 때문에 훨씬 더 복잡합니다. 우리는 다른 인코딩 시스템에 대한 기본 바이트를 되찾고 싶습니다.

예를 들어, 서유럽에서 많이 사용되는 인코딩 유형 중 하나인 iso-8859-8을 사용합니다. 특정 언어이므로 문자열을 가져와서 유니코드가 아닌 인코딩으로 변환해야 하는 경우.

>>s.encode('iso-8859-8')
b'\xf9\xec\xe5\xed'

s='北京' 즉 베이징과 같이 다른 언어의 무언가가 있는 경우 어떤 일이 발생하는지 봅시다. 이를 인코딩하면 바이트 문자열이 반환됩니다.

여기에서 각 중국어 문자가 3바이트로 표시되기 때문에 6바이트가 뒤로 있음을 알 수 있습니다. 이것은 UTF-8에서 발생하는 가변 길이 인코딩입니다.

>>s='北京'
>>s.encode()
b'\xe5\x8c\x97\xe4\xba\xac'

이제 iso-8859-8을 사용하여 北京을 인코딩하려고 합니다. 이를 실행하면 UnicodeEncodeError가 발생합니다. 즉, 인코딩에서 이러한 유니코드 문자를 가져와서 허용되지 않는 iso-8859-8 인코딩의 바이트.

s.encode("iso-8859-8")

UnicodeEncodeError

이것으로 영어 단어를 결합하면 오류가 있을 수 있기 때문에 실패하지만 오류를 무시하는 데 도움이 되는 매개변수를 추가할 수 있습니다.

>>s='I often go to 北京'
>>s.encode('iso-8859-8',errors='ignore')
b'I often go to '

많은 텍스트가 있고 유니코드 문자를 잃어도 괜찮은 경우 이것을 사용할 수 있습니다.

기본적으로 strict와 동일한 help(s.encode)를 살펴보겠습니다. 하지만 몇 가지 다른 사항이 있을 수 있으므로 replace 값을 errors에 사용하면 그렇지 않습니다. 교체 방법을 잘 알고 있으므로 물음표만 사용할 것입니다.

help(s.encode)

인코딩 도움말

>>s='I often go to 北京'
>>s.encode('iso-8859-8',errors='replace')
b'I often go to ??'

xmlcharrefreplace를 사용하면 해당 유니코드 문자와 관련된 XML 엔터티를 다시 가져오므로 이를 XML 문서나 HTML에 붙여넣으려는 경우 이 방법이 작동합니다.

>>s.encode('iso-8859-8',errors='xmlcharrefreplace')
b'I often go to 北京'

귀하의 필요에 따라 다릅니다. 유니코드 문자를 바이트로 변환하면 네트워크를 통해 보내거나 다른 종류의 인코딩 시스템을 다루기 때문에 일반적입니다.

초보자이고 자세히 설명하고 싶지 않은 경우 다음 명령을 사용하여 unidecode라는 Python 패키지를 설치합니다.

유니코드를 ASCII로 직접 변환합니다. 유니코드를 ASCII로 변환해야 하는 응용 프로그램으로 작업할 때 유용합니다.

from unidecode import unidecode

unidecode(u"北京")
# Output: 'Bei Jing'
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Python Unicode