UnicodeConversionError 예외
UnicodeConversionError 예외
유니코드 데이터를 다루다 보면 "이 바이트는 유니코드로 해석할 수 없는데?" 하는 순간이 생겨요. 이 예외는 데이터를 유니코드로 변환하거나 유니코드에서 다른 형태로 변환할 때 발생해요. 잘못된 바이트 시퀀스가 들어왔다는 뜻이죠.
본문
UnicodeConversionError는 데이터를 유니코드로(또는 유니코드에서) 변환할 때 발생하는 예외예요.
예를 들어 아래 코드처럼 유효하지 않은 바이트를 문자 리스트로 변환하려 하면 이 예외가 던져져요. <<0xFF>>는 UTF-8로 해석할 수 없는 값이라서요.
iex> String.to_charlist(<<0xFF>>)
** (UnicodeConversionError) invalid encoding starting at <<255>>
문자열 관련 함수들은 대부분 문자열이 유효한 UTF-8 인코딩이라고 가정해요. 그래서 바이너리나 파일에서 읽은 데이터에 깨진 바이트가 섞여 있으면, 그 데이터를 String 함수로 처리하는 순간 이 예외를 만나게 돼요.
만약 이 예외가 발생했다면, 입력 데이터가 정말 유효한 UTF-8인지부터 확인해 보세요. 외부에서 읽어온 데이터(특히 파일, 네트워크 응답, 데이터베이스 값)는 인코딩이 섞여 있을 수 있어요. 필요하다면 String.valid?/1로 데이터가 유효한지 먼저 점검하거나, String.replace/4 같은 함수로 잘못된 부분을 처리하는 전략을 세우는 게 좋아요.