logo

자바 문자열 인코딩

Java에서는 다음을 처리할 때 때로는 특정 문자 집합으로 문자열을 인코딩해야 하는 경우도 있습니다. 부호화 데이터를 한 형식에서 다른 형식으로 변환하는 방법입니다. 문자열 객체는 UTF-16 인코딩을 사용합니다. UTF-16의 문제점은 수정할 수 없다는 것입니다. 다른 인코딩을 얻는 데 사용할 수 있는 방법은 byte[] 배열뿐입니다. 예상치 못한 데이터가 나오면 인코딩 방식은 적합하지 않습니다. 이 섹션에서는 다음 내용을 학습합니다. 문자열을 인코딩하는 방법 자바 .

참고: UTF-8로 문자열을 인코딩하는 것은 불가능합니다. 따라서 ByteBuffer를 사용하거나 배열을 호출하여 byte[]를 얻으세요.

이 섹션을 진행하기 전에 문자 인코딩을 이해해야 합니다. 간단히 살펴보겠습니다. 이해하자 문자열을 인코딩해야 하는 이유 .

문자 인코딩 텍스트 데이터를 이진수로 변환하는 기술입니다. 특정 문자에 고유한 숫자 값을 할당하고 해당 숫자를 이진 언어로 변환할 수 있습니다. 이러한 이진수는 나중에 해당 값에 따라 원래 문자로 다시 변환될 수 있습니다.

문제

독일어 문자열이 있다고 가정해 보겠습니다. 안녕 그리고 이를 인코딩해야 합니다. 다음 코드 조각을 고려해보세요.

 String str = 'Tsch�ss'; byte[] bytesOfString = str.getBytes(); String encoded_String = new String(bytesOfString, StandardCharsets.US_ASCII); assertNotEquals(encoded_String, str); 

US_ASCII를 사용하여 문자열을 인코딩하면 안녕 US_ASCII 인코딩은 비ASCII 문자( ). ASCII로 인코딩된 문자열을 UTF-8로 변환하면 동일한 문자열을 얻습니다.

 String str = 'GoodBye'; byte[] bytesOfString = str.getBytes(); String asciiEncondedEnglishString = new String(bytesOfString, StandardCharsets.US_ASCII); assertEquals(encoded_String, str); 

byte[] 배열에 유니코드가 아닌 텍스트가 포함되어 있으면 다음을 사용하여 텍스트를 유니코드로 변환할 수 있습니다. 건설자. 반대로, 다음을 사용하여 String 객체를 비유니코드 문자의 byte[] 배열로 변환할 수도 있습니다. 문자열.getBytes() 방법. 다음을 사용하여 문자열을 인코딩해 보겠습니다. getBytes() 방법.

String.getBytes() 메서드 사용

자바 수업 제공합니다 getBytes() 메서드 문자열을 UTF-8로 인코딩하는 데 사용됩니다. 이 메서드는 문자열을 바이트 시퀀스로 변환하고 결과를 배열에 저장합니다.

통사론:

 public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 

charsetName을 매개변수로 구문 분석하고 바이트 배열을 반환합니다. 그것은 던진다 지원되지 않는 인코딩 예외 명명된 문자 집합이 지원되지 않는 경우.

문자열을 UTF-8 인코딩으로 변환하는 Java 프로그램을 만들어 보겠습니다.

문자열EncodingExample.java

 public class StringEncodingExample { public static void main(String args[]) throws Exception { //string to encode String str = 'Google Cloud'; //invokes the getBytes() method and stores an array of bytes into array[] byte array[] = str.getBytes('UTF8'); System.out.println('Encoded String: '); //enhanced for loop that iterates over the array for (byte x: array) { //prints the sequence of bytes System.out.print(x+' '); } } } 

산출:

 Encoded String: 71 111 111 103 108 101 32 67 108 111 117 100 

StandardCharsets 클래스 사용

StandardCharset 클래스를 사용하여 문자열을 인코딩할 수도 있습니다. 문자열을 인코딩하는 데는 두 단계가 있습니다. 먼저 문자열을 바이트로 디코딩한 다음 UTF-8로 인코딩합니다. 예를 들어 다음 코드를 고려해보세요.

 String str = ' Tsch�ss'; ByteBuffer buffer = StandardCharsets.UTF_8.encode(str); String encoded_String = StandardCharsets.UTF_8.decode(buffer).toString(); assertEquals(str, encoded_String); 

문자열을 인코딩하는 또 다른 방법은 Base64 인코딩을 사용하는 것입니다. 다음 섹션에서는 Base64 인코딩 및 디코딩에 대해 논의하겠습니다.