Android/문제 해결

[Android/문제 해결] java.lang.illegalArgumentException: Unexpected char 0xxxxx at Number in ~ Error


📌 illegalArgumentException: Unexpected char 에러에 대한 처리

 

나의 경우 안드로이드에서 Multipart Upload를 시행 중 위의 에러를 겪었는데,

결과적으로는 이런 에러가 떠주어서 정말 고맙다는 생각까지 하게 되었다.

 

만약 이런 에러가 뜨지 않았다면, 비정상적인 결과를 보고 대체 어디서 에러가 난것인지 찾느라 몇 달을 밤새야 했을 것이니.. 심지어 업로드하는 대상에 따라서 간헐적으로 뜨는 에러이기도 했다. 

 

에러 문구 그대로, 정상적인 작업(여기서는 업로드)을 진행 불가능하게 만드는 어떤 텍스트가 존재한다고 알려주는 것이다.

 

단순 텍스트로는 보이지 않아도 업로드를 위해 인코딩되거나 할 때, 개행 문자로 바뀌거나 다른 의미있는 문자로 바뀌게 되어 원치않은 데이터가 보내지기에 문제가 되는 것이기에 컴파일 단에서 알려주는 것이다.

 

나의 경우 MultiPart의 구성요소인 Content-Disposition 에 포함되어 인코딩되는 파일명의 이름에 위의 문제를 일으키는 텍스트가 있었다.

 

그래서 파일명을 Base64로 인코딩하였고, 문제는 해결되었다. 물론 파일 확장자는 따로 뒤에 붙여주었다.

 

아래는 예시이다.

// 파일 확장자
val fileExt = file.name.substringAfterLast('.', "")

// Base64로 인코딩된 파일명
val encodedFileName = Base64.encodeToString(file.name.toByteArray(Charsets.UTF_8), Base64.NO_WRAP)