본문 바로가기
IT/Java

[JAVA] 자바 스트링 한글 깨짐 (String 인코딩 변환 방법)

by 스터딩아재 2022. 5. 12.
반응형

수신 데이터를 저장하려고 보니 한글이 깨지는 경우가 많습니다. 콘솔에는 정상적으로 찍히는데 디비에 저장된 데이터가 깨지는거라면 DB 캐릭터셋 문제일 수 있지만 자바 콘솔에서부터 깨지면 인코딩 오류일 가능성이 높습니다.

 

 

1. FileReader에 Encoding 추가

2. 직접 String Encoding

 


1. FileReader에 Encoding 추가

우선 Reader에 인코딩 방식을 추가해주면 됩니다.

* FileReader의 경우는 기본 인코딩을 사용하기 떄문에, FileInputStream을 사용해야 합니다.

 

// OS 기본 인코딩
Reader reader = new FileReader(fileName);

// 인코딩 적용
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"));

 

 

 

2. 직접 String Encoding

Reader에 추가했음에도 변환되지 않은 경우 직접 Encoding합니다. 보통 Util.java에 toKorean, toAmerican 등의 함수가 이미 있을 수도 있습니다.

 

// 기본 형태
new String( korStr.getBytes("변경전"), "변경후") );

// 인코딩 변환
String charset[] = {"utf-8", "euc-kr", "ksc5601", "iso-8859-1", "8859_1", "ascii"};
  
for (String before : charset){
    for (String after : charset){
        if (!before.eqauls(after){
            System.out.println(before + " -> " + after + " = " + new String("변경할 문자".getBytes(before), after));
        }
    }
}

 

위 방법으로 변환을 하다보면 안 깨지는 인코딩 방식이 나올 것 입니다.

로컬과 서버의 인코딩 방식이 다를 수 있으니, 실행되는 서버에서 직접 테스트 하시는 걸 추천드립니다.

 


 

 

그리드형

댓글