줄바꿈 인코딩 에러
수정전 : byte[] dd = java.util.Base64.getDecoder().decode(encodedString);
수정후 : byte[] dd = java.util.Base64.getMimeDecoder().decode(encodedString.replaceAll("\\r\\n|\\r|\\n","");
API에 보면 Returns 값이 다름
static Base64.Decoder getDecoder()
Returns a Base64.Decoder that decodes using the Basic type base64 encoding scheme.
static Base64.Decoder getMimeDecoder()
Returns a Base64.Decoder that decodes using the MIME type base64 decoding scheme.
TYPE에 관한 스펙설명
- BASIC : 인코딩 및 디코딩 작업을 위해 RFC 4648 및 RFC 2045의 표 1에 지정된 "Base64 알파벳"을 사용합니다. _인코더는 줄 바꿈(줄 구분 기호) 문자를 추가하지 않습니다. 디코더는 base64 알파벳 외부의 문자가 포함된 데이터를 거부_합니다.
- MIME : 인코딩 및 디코딩 작업에 RFC 2045의 표 1에 지정된 "Base64 알파벳"을 사용합니다. 인코딩된 출력은 각각 76자를 넘지 않는 줄로 표현되어야 하며, _캐리지 리턴 '\r'과 줄 바꿈을 '\n'줄 구분 기호로 사용_합니다. 인코딩된 출력의 끝에는 줄 구분 기호가 추가되지 않습니다. 디코딩 작업에서는 base64 알파벳 표에 없는 모든 줄 구분 기호 또는 기타 문자가 무시됩니다.
(사실 이 때문에 replaceAll 구간은 무의미할 수도 있다. 그런데 파람값이 분명하게 특정되지 않아서 보험용(?)으로 처리해둠)
https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Base64.html
반응형