OutputStreamWriter를 사용할 때 한글이 깨지는 이유는 문자 인코딩을 명시하지 않고 기본 인코딩을 사용할 경우
, 시스템 환경에 따라 UTF-8이 아닌 다른 문자셋(예:EUC-KR, ISO-8859-1)이 사용되기 때문입니다.
✅ 문제 상황 예시 (깨지는 코드)
OutputStream os = connection.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(os); // ❌ 인코딩 미지정
writer.write("홍길동");
writer.flush();
이 경우, OutputStreamWriter는 시스템 기본 문자셋을 사용합니다. 시스템이 UTF-8이 아닐 경우 한글이 깨질 수 있습니다.
✅ 해결 방법: 명시적으로 UTF-8 인코딩 지정
OutputStream os = connection.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8"); // ✅ 인코딩 지정
writer.write("홍길동");
writer.flush();
또는 BufferedWriter를 함께 쓰면 더 안정적이고 효율적으로 데이터를 보낼 수 있습니다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));
bw.write("홍길동");
bw.flush();
✅ 반드시 같이 설정해야 하는 부분
HTTP 헤더에도 인코딩 지정
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
서버가 UTF-8로 응답하지 않으면, 응답도 수동 디코딩 필요
new InputStreamReader(conn.getInputStream(), "UTF-8");
✅ 결론
OutputStreamWriter를 사용할 땐 항상 두 가지를 체크하세요:
- 인코딩 "UTF-8"을 명시
- HTTP 헤더에 charset=UTF-8 설정
그렇지 않으면 환경에 따라 한글이 깨질 수 있습니다. 특히 윈도우 환경에서 개발하고 리눅스 서버에 배포할 때 이런 문제가 자주 발생합니다.
'프로그램 > Java' 카테고리의 다른 글
| [Java] 프로그램 시작 끝 수행 시간 출력하기 (0) | 2025.12.02 |
|---|---|
| [Java] 프로그램 루프(Loop) 내에서 스래드 슬립(sleep)을 얼마를 주면 되고 주는 이유는? (0) | 2025.11.28 |
| [Java] HttpsURLConnection에서 한글 깨짐 현상 해결 방법 (0) | 2025.05.20 |
| [Java] HttpsURLConnection을 사용할 때 한글이 깨지는 현상 (0) | 2025.05.20 |
| [Java]Java에서 ArrayList<String> 타입을 병합, Merge 하는 방법 (0) | 2025.05.15 |