Java에서 문자열을 UTF-8로 인코딩

1. 개요

Java에서 String을 처리 할 때 때때로 특정 문자 집합으로 인코딩해야합니다.

이 튜토리얼은 문자열 을 UTF-8 문자셋 으로 인코딩하는 다양한 방법 보여주는 실용적인 가이드입니다 . 더 자세한 기술 정보는 문자 인코딩 가이드를 참조하세요.

2. 문제 정의

Java 인코딩을 보여주기 위해 독일어 문자열 "Entwickeln Sie mit Vergnügen"을 사용합니다.

String germanString = "Entwickeln Sie mit Vergnügen"; byte[] germanBytes = germanString.getBytes(); String asciiEncodedString = new String(germanBytes, StandardCharsets.US_ASCII); assertNotEquals(asciiEncodedString, germanString);

US_ASCII를 사용하여 인코딩 된 이 문자열 은 비 ASCII ü 문자를 이해하지 못하기 때문에 인쇄 될 때 "Entwickeln Sie mit Vergn? gen"값을 제공 합니다 . 그러나 모든 영어 문자를 사용 하는 ASCII 인코딩 문자열 을 UTF-8 로 변환 하면 동일한 문자열을 얻습니다.

String englishString = "Develop with pleasure"; byte[] englishBytes = englishString.getBytes(); String asciiEncondedEnglishString = new String(englishBytes, StandardCharsets.US_ASCII); assertEquals(asciiEncondedEnglishString, englishString);

UTF-8 인코딩을 사용할 때 어떤 일이 발생하는지 살펴 보겠습니다.

3. Core Java로 인코딩

핵심 라이브러리부터 시작하겠습니다.

String 은 Java에서 불변이므로 String 문자 인코딩을 변경할 수 없습니다 . 원하는 것을 얻으려면 String 의 바이트를 복사 한 다음 원하는 인코딩으로 새 바이트 를 만들어야합니다 .

먼저 String 바이트를 얻은 다음 검색된 바이트와 원하는 문자 집합을 사용하여 새 바이트를 만듭니다.

String rawString = "Entwickeln Sie mit Vergnügen"; byte[] bytes = rawString.getBytes(StandardCharsets.UTF_8); String utf8EncodedString = new String(bytes, StandardCharsets.UTF_8); assertEquals(rawString, utf8EncodedString);

4. Java 7 StandardCharset으로 인코딩

또는 Java 7도입 된 StandardCharsets 클래스 를 사용하여 String 을 인코딩 할 수 있습니다 .

먼저 문자열 을 바이트로 디코딩하고 두 번째로 문자열 을 UTF-8 로 인코딩합니다 .

String rawString = "Entwickeln Sie mit Vergnügen"; ByteBuffer buffer = StandardCharsets.UTF_8.encode(rawString); String utf8EncodedString = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(rawString, utf8EncodedString);

5. Commons-Codec으로 인코딩

핵심 Java를 사용하는 것 외에도 Apache Commons Codec을 사용하여 동일한 결과를 얻을 수 있습니다.

Apache Commons Codec은 다양한 형식에 대한 간단한 인코더와 디코더가 포함 된 편리한 패키지입니다.

먼저 프로젝트 구성부터 시작하겠습니다. Maven을 사용할 때 pom.xml에 commons-codec 종속성을 추가해야합니다 .

 commons-codec commons-codec 1.14 

그런 다음 우리의 경우 가장 흥미로운 클래스는 String 을 인코딩하는 메서드를 제공하는 StringUtils 입니다. 이 클래스를 사용하면 UTF-8로 인코딩 된 문자열을 얻는 것은 매우 간단합니다.

String rawString = "Entwickeln Sie mit Vergnügen"; byte[] bytes = StringUtils.getBytesUtf8(rawString); String utf8EncodedString = StringUtils.newStringUtf8(bytes); assertEquals(rawString, utf8EncodedString);

6. 결론

문자열 을 UTF-8로 인코딩하는 것은 어렵지 않지만 직관적이지 않습니다. 이 튜토리얼에서는 핵심 Java를 사용하거나 Apache Commons Codec을 사용하는 세 가지 방법을 제공합니다.

항상 그렇듯이 코드 샘플은 GitHub에서 찾을 수 있습니다.