sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  

브라우저로부터 servlet 으로 base64 로 인코딩된 문자열을 전송 받아 decoding 을 수행하려는데

자꾸 'Illegal base64 character 20' 이라는 오류 메세지가 출력되었다.

 

java debugging 으로 문자열을 캣치해서 테스트 프로그램에 해당 문자열을 넣고 테스트해보는데 문제가 발생하지 않는다.

request 에서 getPrarameter() 로 갓 뽑아낸 변수값에는 눈에 보이지 않는 어떤 문자가 포함된 것 같다는 의심이 들었다.

하지만 너무나 생소한 현상이라서 이래 저래 수소문 하려다가 걍 gpt 에게 물어보니

3가지 경우에서 발생하는 오류라고 알려주는데

 

1. 문자열의 인코딩 문제:

문자열이 잘못 인코딩되었거나, 잘못된 형식으로 전달된 경우.

문자열에 공백, 줄 바꿈 문자 또는 기타 유효하지 않은 Base64 문자(예: 특수 문자, 제어 문자)가 포함된 경우.

2. 문자열 변환 문제:

문자열을 Base64 디코딩하기 전에 다른 변환 작업이 필요한 경우.

문자열이 URL-safe Base64 인코딩 방식으로 인코딩된 경우.

3. 원본 문자열의 손상:

문자열이 전송 중 손상되었거나, 불완전한 상태로 전달된 경우.

 

2번의 URL-safe 라는 부분이 바로 촉이 왔다.

web 환경이니 당연히 브라우저에서 url encoding 처리를 자동으로 했을것 같다는 예감이 들었다.

 

그리고 gpt 가 알려준대로 다음과 같은 코드로 decoding 해보니 오류가 사라졌다.

byte[] plainTxt = Base64.getUrlDecoder().decode(base64Txt);

 

원래는 특정 브라우저에서만 로직이 동작하지 않아서 비즈니스 로직 오류라고 치부해서 이틀이나 들여서 디버깅에 로직 리팩토링까지 했던건데

결론은 로직이 아닌 환경의 문제임을 알게 되어 매우 후련하지만 ... 시간이 ㅜ.ㅜ 흑

진작에 gpt 에게 물어볼걸 그랬다.

 

 

 

번호 제목 글쓴이 날짜 조회 수
63 [ChatGPT] javax.* 패키지와 jakarta.* 패키지의 혼합 사용 방안 황제낙엽 2025.04.15 27
62 [ChatGPT] *.servlet.http.HttpServlet 클래스를 사용할 수 있는 주요 WAS 목록 황제낙엽 2025.04.14 36
61 jakarta.servlet 패키지를 이용한 File Upload 구현 (2024.03.03, Servlet 5.0) 황제낙엽 2025.01.02 177
60 [ChatGPT] Java EE가 Jakarta EE로 전환 황제낙엽 2025.01.01 239
59 [ChatGPT] <jsp:include>에서 flush="true"를 설정시의 몇 가지 문제점 과 대안 황제낙엽 2024.07.19 208
58 [Copilot] JSP, Servlet, web.xml, mysql 한글 설정 황제낙엽 2024.07.12 179
» Base64 클래스의 encode, decode 에서 URL-safe 황제낙엽 2024.07.10 273
56 [Copilot] JSP 에서 다른 페이지를 현재 페이지에 포함시키는 문법 (include) 황제낙엽 2024.06.26 224
55 [Gemini] HttpURLConnection 클래스를 이용한 데이터 전송 방식 비교 황제낙엽 2024.03.14 556
54 servlet name 에 camel case 를 사용해서는 안되는 이유 황제낙엽 2023.10.24 209
53 org.apache.commons.fileupload.servlet.ServletFileUpload 이용 예시 황제낙엽 2023.08.25 503
52 ServletFileUpload.parseRequest() 실행 결과 리스트가 비어있는 오류 황제낙엽 2023.08.25 659
51 어떤 multi-part 설정도 제공되지 않았기 때문에, part들을 처리할 수 없습니다. file 황제낙엽 2023.08.23 891
50 (Bard) the request was rejected because no multipart boundary was found file 황제낙엽 2023.08.23 337
49 (Bard) multipart/form-data 요청 처리를 위한 MultipartHttpServletRequest file 황제낙엽 2023.08.21 210
48 ajax 로 post 데이터를 servlet 으로 전달 받기 (with nexacro) [1] secret 황제낙엽 2023.02.26 0
47 HttpServletRequest, HttpServletResponse, JSONObject, POST 황제낙엽 2022.01.12 389
46 [JSP] 파일 다운로드 테스트 file 황제낙엽 2021.04.12 3560
45 [HttpURLConnection] Authorization 헤더를 넣어 GET Request 황제낙엽 2020.08.12 1062
44 [AWS, 웹 프로젝트] AWS+MySQL+SpringFrameWork5+JAVA8+ React+Gradle+Webpack+GIT+Jenkins file 황제낙엽 2020.04.08 553