PHpullh
학습 라이브러리/Java/Charset과 인코딩

JAVA · 파일/IO

Charset과 인코딩

문자 인코딩 처리와 Charset API를 올바르게 사용합니다.

파일/IO중급CharsetUTF-8인코딩디코딩

핵심 설명

문자 인코딩 처리와 Charset API를 올바르게 사용합니다.

Java code

import java.nio.charset.*;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.util.Arrays;

public class CharsetDemo {
    public static void main(String[] args) {
        String text = "안녕하세요 Java!";

        // 인코딩: String -> byte[]
        byte[] utf8 = text.getBytes(StandardCharsets.UTF_8);
        byte[] euckr = text.getBytes(Charset.forName("EUC-KR"));

        System.out.println("UTF-8 바이트: " + utf8.length);    // 19
        System.out.println("EUC-KR 바이트: " + euckr.length);  // 16

        // 디코딩: byte[] -> String
        String decoded = new String(utf8, StandardCharsets.UTF_8);
        System.out.println(decoded);

        // 잘못된 인코딩으로 디코딩
        String broken = new String(utf8, StandardCharsets.ISO_8859_1);
        System.out.println("깨진 문자: " + broken);

        // CharsetEncoder/Decoder — 세밀한 제어
        CharsetEncoder encoder = StandardCharsets.UTF_8.newEncoder()
            .onMalformedInput(CodingErrorAction.REPLACE)
            .onUnmappableCharacter(CodingErrorAction.REPLACE);

        // 사용 가능한 Charset 확인
        System.out.println("기본 Charset: " + Charset.defaultCharset());
        System.out.println("UTF-8 지원: " +
            Charset.isSupported("UTF-8"));
    }
}

학습 팁

항상 StandardCharsets.UTF_8을 명시적으로 지정하세요. 시스템 기본 인코딩에 의존하면 환경마다 결과가 달라집니다.

주의할 점

"한글".getBytes()는 시스템 기본 인코딩을 사용합니다. Windows에서는 EUC-KR, Linux에서는 UTF-8이 될 수 있어 이식성이 떨어집니다.

자주 묻는 질문

Charset과 인코딩란 무엇인가요?

문자 인코딩 처리와 Charset API를 올바르게 사용합니다.

Charset과 인코딩 학습 시 주의할 점은 무엇인가요?

"한글".getBytes() 는 시스템 기본 인코딩을 사용합니다. Windows에서는 EUC-KR, Linux에서는 UTF-8이 될 수 있어 이식성이 떨어집니다.