본문 바로가기

파이썬(Python)/인코딩

UnicodeDecodeError 만드는 바이트값 목록

UTF-8 (1~4바이트 가변)

인코딩 바이트
크기와 위치
가능 설명+오류값 판별법
1바이트 가능: \x00 ~ \xFF 전부 가능.
\x00 ~ 
2바이트 이상에서,
나머지 바이트
가능: \x80 ~\BF

불가능:
\x00~\x7F
\xC0~\xFF
바이트 값이 반드시 10xx xxxx 이어야 하므로

헥스코드2자리 중 앞자리가 8,9,A,B (1000 ~ 1011) 만 가능하다.
나머지 값인 0~7, C~F 가 들어가면 오류난다.
2바이트의
첫번째 바이트
가능: \xC0~\xDF

불가능:
\x00~\xBF
\xE0~\xFF
바이트 값이 반드시 110x xxxx 이어야 하므로
헥스코드2자리 중 앞자리가 C,D (1100,1101)만 가능하다.
나머지 값인 0~9, A,B,E,F 가 들어가면 오류난다.
3바이트의
첫번째 바이트
가능: \xC0~\xCF

불가능:
\x00~\xBF
\xD0~\xFF
바이트 값이 반드시 1110 xxxx 이어야 하므로

헥스코드2자리 중 앞자리가 C(1100)로 고정된다.
나머지는 앞자리에 들어가면 오류난다.
4바이트의
첫번째 바이트
가능: \xF0~\xF7

불가능:
\x00~\xEF
\xF8~\xFF
바이트 값이 반드시 1111 0xxx 이어야 하므로

헥스코드2자리 중 앞자리 F(1100,1101)로 고정된다.
나머지 값이 들어가면 오류난다.

헥스코드 뒷자리가 0~7 (0000 ~ 0111)만 가능하다.
나머지 값인 8~F 가 들어가면 오류난다.

 

EUC-KR, CP949 (2바이트 고정)

2바이트의 절반 정도인 약 3만2천개를 안 쓴다.

일일히 적어보려고 했으나 중간중간 빈 자리가 많고 불규칙한 면도 커서, 답이 없네.

아래 표에 들어가서 바이트값 검색해보고, 그게 나오면 decode 가 불가능한 값이다.

더 좋은 방법을 만들어보려 했으나 잘 안되어서 포기.

https://docs.google.com/spreadsheets/d/1uqwFQKfm1Dfo9er6lcG8eAmnsPg-mkVZKNQYXy0gc70/edit#gid=1676353955

 

EncodingError_1~2Bytes_Test_Gsheet

main 10진수,16진수,decode: Y or N,Actual Unicode Shown,compare DEC,HEX,utf-8,cp949,utf-16(le),utf-8,cp949,utf-16(le),p == decoded, pp == decoded but had error to save it as actual letter or picture 0,0,decoded,decoded,decoded,pp,pp,pp 1,1,decoded,decod

docs.google.com