Java

WriteBytes의 한글 깨짐 해결 방법

taey 2024. 10. 19. 02:07

소켓 프로그래밍을 하던 중, 브라우저에 한글이 깨져 나왔다.

 

해결 방법

1. 응답 헤더에 인코딩 방식 정의

outToClient.writeBytes("Content-Type: text/html; charset=UTF-8\r\n");

 

 

 

2. HTML 파일에 인코딩 방식 정의

<meta charset="UTF-8">

 

 

3. IDE 기본 인코딩 방식을 UTF-8로 변경

 

 

4.프로젝트 SDK를 17버전으로 다운그레이드(18버전 이상부터 한글 깨짐 오류가 있다는 글을 확인함)

 

 

5. getBytes(StandardCharsets.UTF_8)로 명시적 정의

outToClient.write(outputdata.toString().getBytes(StandardCharsets.UTF_8));

 

5번까지 해서 한글이 깨지지 않고, 나왔다.

찾아보니 writeBytes를 하면 문자열을 시스템의 기본 인코딩 방식이 아닌 ISO-8859-1로 인코딩 후 바이트 배열로 변환하기 때문에 명시적으로 정의해야지 UTF-8로 인코딩된 것이다.

OpenJDK의 writeBytes 방식은 문자열의 각 문자를 1바이트로 변환하여 전송하는 것이다.
하지만 한글과 같은 유니코드 문자는 2바이트 이상을 필요로 하기 때문에, 이렇게 변환하면 문자가 깨지게 된다.

 

그래서 writeBytes를 했을 때, UTF-8로 다 설정을 해도 안 됐던 것이었따아아

'Java' 카테고리의 다른 글

JVM 자동 메모리 관리  (1) 2025.12.11
자바 예외 이해  (1) 2024.10.06