[JAVA] 맥(Mac OS)에서 파일 업로드 시 파일명 자모음 분리되는 경우(자소분리) 처리방법
운영체제 맥(Mac OS)에서 파일 업로드 시 file 타입의 input 박스(<input type=”file”>)에 넣은 파일명이 “테스트.txt”일 경우, 백엔드(자바) 단에서 “ㅌㅔㅅㅡㅌㅡ.txt” 형태로 한글 자모음이 분리되어 온다.
이는 multipart/form-data 로 전송해도 그렇고 일반적인 parameter 로 전달해도 똑같다.
만약 프론트엔드에서 UTF-8로 인코딩하고 BASE64 로 감싸서 전달하더라도 문제는 동일하다. (ex : btoa(encodeURIComponent(“테스트”)); 를 파라미터로 전달)
BASE64 로 받은 파라미터 값을 백엔드(자바) 단에서 BASE64 디코드하고 URLDecoder.decode 처리해보면 동일하게 한글 자모음이 분리되어 있다.
만약 맥 OS에서는 글자가 “테스트”라고 정상적으로 보여도, 실제로는 “ㅌㅔㅅㅡㅌㅡ” 로 구성되어 있다는 것이다.
애초에 맥 OS가 인코딩 방식으로 NFD 라고 불리는 한글 조합형 방식을 사용하기 때문으로 보인다.
맥 OS는 NFD(Normalization Form Canonical Decomposition) 방식을, 윈도우 OS는 NFC(Normalization Form Canonical Composition) 방식을 사용한다고 한다. 맥 OS는 조합형 방식(ex : ㅌㅔㅅㅡㅌㅡ), 윈도우는 완성형 방식(ex : 테스트)이다.
다행히 이 두 가지 인코딩 방식은 자바 단에서 서로 교환 가능하다.
아래와 같이 사용하면 된다.
즉, 파일 업로드 시점에 아래 메서드를 태워서 운영체제에 맞게 문자열 값을 보정해주면 된다.
/** |
참고사이트 1 : https://tt.kollhong.com/79
참고사이트 2 : https://gemimi.tistory.com/43