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
'Programming Language > Python' 카테고리의 다른 글
requests 사용시 주의사항 (0) | 2022.02.04 |
---|---|
파이썬에서 쉘 스크립트 사용하기 (0) | 2021.09.09 |
[shapely] 지정된 모듈을 찾을 수 없습니다 (0) | 2021.08.23 |
애플워치로 HRV 데이터 추출하기 (2) | 2021.07.02 |
[python] joblib.load() 에러 (0) | 2021.05.12 |