반응형
[상황]
파이썬에서 다수의 [특문+문자]를 str로 처리하고(1)
base64로 인코딩(2) 해야되는 케이스가 있었다.
근데.. 파이썬을 썼다가 안썼다가 하니.. 에러가 주구장창 나서 스트레스르 받았다.
이에 해당 이슈 정리
[발생한 에러 종류]
ValueError: string argument should contain only ASCII characters
TypeError: a bytes-like object is required, not 'str'
UnicodeEncodeError: 'ascii' codec can't encode characters in position 359-361: ordinal not in range(128)
[요약]
<방법1>
utf-8로 변환하고 bs64인코딩, utf-8 디코딩
bs64디코딩 후 utf-8 디코딩
text = '임의값 입력'
bs64_text=(base64.b64encode(text.encode('utf-8')))
enc_text=bs64_text.decode('utf-8')
print(enc_text)
print('개행 테스트\n\n\n')
data1 = base64.b64decode(enc_text)
data2 = data1.decode('utf-8')
print(data2)
<방법2>
str => encode() = bytes
bytes => decode() = str
mytext_bytes = mytext.encode() #bytes
mytext_str = mytext_bytes.decode() #str
encoded=(base64.b64encode(mytext.encode())) #bytes 된거 base64로
tmp = base64.b64decode(encoded) # base64 디코딩
print(tmp.decode()) #base64 디코딩된거 str로
[상세1]
encoded=base64.b64encode(mytext) 실행 시 에러1 발생
[에러1]
TypeError: a bytes-like object is required, not 'str'
<원인> : base64 인코딩할 때 bytes type이 필요해서 에러 터짐
<해결>
str => encode() = bytes 되고
bytes => decode() = str 됨
또는 utf-8로 형변환 함
<예제>
mytext_bytes = mytext.encode() #bytes
mytext_str = mytext_bytes.decode() #str
########################################################################################################
########################################################################################################
encoded=(base64.b64encode(mytext.encode('ascii'))) 실행 시 에러2 발생
에러3은 원인 까먹음
[에러2,3]
UnicodeEncodeError: 'ascii' codec can't encode characters in position 359-361: ordinal not in range(128)
ValueError: string argument should contain only ASCII characters
<원인/해결>
파이썬 디폴트는 unicode 사용
한글 사용하려면 unicode를 utf-8로 변환해서 사용 가능
unicode를 utf-8로 encoding ㄱㄱ
<예제>
encoded=(base64.b64encode(mytext.encode('utf-8'))) # utf-8 변환 또는
encoded=(base64.b64encode(mytext.encode())) # bytes 변환
-끝-
p.s.
아래 사이트를 참고하여 해결하려 했으나. ascii 인코드 수행 시 에러나서 utf-8로 시도하니 됬다.
728x90
반응형
'프로그래밍' 카테고리의 다른 글
[파이썬 에러잡기] TypeError: string indices must be integers, IndexError: string index out of range 에러 해결 (0) | 2022.05.23 |
---|---|
파이썬 피들러 같이 쓰기, fiddler와 python requests 모듈 같이 사용 (0) | 2022.05.23 |
python requests 모듈 정리 (0) | 2022.05.20 |
Arrow function(js 화살표함수) (0) | 2022.04.11 |
[파이썬에러 모음] 인코딩 에러(SyntaxError) 해결 (0) | 2022.04.05 |