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 에게 물어볼걸 그랬다.