Programming Language/Python

[Python] String type 한글 바이트 -> 한글 변환

깜태 2022. 4. 11. 15:11
728x90

유니코드를 변환하고 받아오는 과정에서 타입이 변환되는 경우가 생긴다.

나의 경우는 대략 이렇다.

아래와 같이 입력부터 한글로 들어왔다면 인코딩을 utf-8로 했다면 디코딩도 utf-8로 진행하면 되므로 문제가 되지 않는다.

a = "파이썬"
a = a.encode('utf-8')
print(a, type(a))
b'\xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac' <class 'bytes'>

 

문제는 아래와 같은 상황인데, 유니코드가 byte로 넘어왔는데 인식이 잘못되어 string으로 변환된 경우이다.

a = "\\xed\\x8c\\x8c\\xec\\x9d\\xb4\\xec\\x8d\\xac"  # 한글, utf-8로 파이썬
print(a, type(a))
# \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac <class 'str'>

 

내가 발견한 방법은 \x 부분을 지워버린 뒤 bytearray.fromhex() 메소드를 이용하는 법이다.

byte_str = "\\xed\\x8c\\x8c\\xec\\x9d\\xb4\\xec\\x8d\\xac"

# 1. replace
byte_str = byte_str.replace('\\x', '')
print(byte_str, type(byte_str))  
# ed8c8cec9db4ec8dac <class 'str'>

# 2. bytesarray.fromhex()
byte_str = bytearray.fromhex(byte_str)
print(byte_str, type(byte_str))  
# bytearray(b'\xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac') <class 'bytearray'>

# 3. decode by utf-8
byte_str = byte_str.decode('utf-8')
print(byte_str, type(byte_str))
# 파이썬 <class 'str'>

 

 

파이썬이 타입이 자유로운만큼 지멋대로인지라 짜증날 때도 있다.

특히 유니코드가 그런거 같은데, 참고가 되었으면 좋겠다.

728x90