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. 코어 자바로 인코딩
핵심 라이브러리부터 시작하겠습니다.
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 StandardCharsets 로 인코딩
또는 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 코덱 을 사용 하여 동일한 결과를 얻을 수 있습니다.
Apache Commons Codec은 다양한 형식의 간단한 인코더와 디코더가 포함된 편리한 패키지입니다.
먼저 프로젝트 구성부터 시작하겠습니다.
Maven을 사용할 때 pom.xml 에 commons-codec 의존성 을 추가해야 합니다 .
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.14</version>
</dependency>
그런 다음 우리의 경우 가장 흥미로운 클래스는 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 코덱을 사용하여 이를 수행하는 세 가지 방법을 제시합니다.
항상 그렇듯이 코드 샘플은 GitHub 에서 찾을 수 있습니다 .