머신의 OS 가 EUC-KR 일 때,
이 위에 스프링 부트로 만든 빌드를 java -jar *.jar 와 같이 실행하면..
빌드된 프로그램을 프로세스에 할당하면서,
JVM 문자셋을 OS 의 문자셋인 EUC-KR 과 동일하게 세팅한다.
소켓 통신 프로그램에 문자셋이 특별하게 설정되지 않는 경우,
외부에서 들어오는 데이터의 문자셋이 UTF-8 이므로,
소켓 통신의 결과 데이터도 UTF-8 이다.
스프링 부트의 JVM 은 EUC-KR 이고,
외부에서 가져온 정보가 UTF-8 이므로
스프링 부트의 .java 에서 문자셋을 이렇게 저렇게 아무리 고쳐 봐야,
한글을 포함한 n-bytes 문자들이 깨지게 된다.
범용으로 설계된 소켓 프로그램의 문자셋을 변경할 수 없고,
OS 의 문자셋도 바꿀 수 없다면..
남은 것은 딱 하나.. JVM 구동시 옵션으로 문자셋을 설정해 주는 것이다.
java -Dfile.encoding=UTF-8 -jar 빌드된.jar
이렇게 되면, 외부 데이타의 문자셋과 OS 의 문자셋이 다르더라도,
jvm 에 설정된 문자셋으로 외부 데이타를 다뤄주므로
문자가 깨지지 않고 정상적으로 작동한다.
'Server Oriented > Server' 카테고리의 다른 글
리눅스 awk (1) | 2024.09.04 |
---|---|
Whitelabel Error Page 화면과 함께 for checking its last-modified timestamp 로그가 찍히는 경우 (1) | 2024.06.04 |
스프링 application.yml (0) | 2022.09.26 |
Oracle DB 와 ojdbc, jdk 버전 관계 (0) | 2022.09.07 |
Tomcat 열린 파일이 너무 많음, tomcat-users.xml 닫지 못... (2) | 2020.03.19 |