logo

Java에서 바이트 배열을 문자열로 변환하는 방법

바이트 배열을 문자열로 변환하는 과정을 디코딩이라고 합니다. 이 프로세스에는 Charset이 필요합니다. 하지만 우리는 charset을 사용해야합니다 디코딩 바이트 배열.

바이트 배열을 문자열로 변환하는 방법에는 두 가지가 있습니다.

  • 사용하여 문자열 클래스 생성자
  • 사용하여 UTF-8 인코딩

문자열 클래스 생성자를 사용하여

바이트 배열을 문자열로 변환하는 가장 간단한 방법은 byte[]를 생성자 인수로 사용하여 문자열 클래스 생성자를 사용할 수 있습니다.

 String str=new String(bytes); 

다음 예에서는 문자 인코딩을 사용하지 않습니다.

DFA 예
 public class ByteArraytoStringExample { public static void main(String args[]) { try { byte[] bytes = 'hello world'.getBytes(); //creates a string from the byte array without specifying character encoding String s = new String(bytes); System.out.println(s); } catch(Exception e) { e.printStackTrace(); } } } 

산출:

문자열을 정수로
Java에서 바이트 배열을 문자열로 변환하는 방법

UTF-8 인코딩을 사용하여

바이트 배열을 문자열로 변환하는 동안 문자 인코딩을 기억하세요. 바이트는 이진 데이터이고 문자열은 문자 데이터이기 때문입니다. 바이트 배열이 생성된 텍스트의 원래 인코딩을 아는 것이 중요합니다. 다른 문자 인코딩을 사용하면 원래 문자열을 다시 얻을 수 없습니다.

'로 인코딩된 파일에서 바이트 배열을 읽어야 한다고 가정해 보겠습니다. ISO_8859_1 '. 바이트 배열을 문자열로 변환하는 동안 문자 인코딩이 없습니다. String 클래스 생성자를 사용하여 바이트 배열을 문자열로 변환하지만 동일한 텍스트를 다시 얻을 것이라는 보장은 제공하지 않습니다. String 클래스의 생성자가 플랫폼의 기본 인코딩을 사용하기 때문입니다.

바이트는 최대 256개의 개별 값을 가질 수 있는 8비트를 보유합니다. 이는 7비트만 사용되는 ASCII 문자 집합에서 작동합니다. 문자 세트에 256개 이상의 값이 있는 경우 문자를 바이트 시퀀스로 인코딩하는 방법을 알려주는 인코딩을 명시적으로 지정해야 합니다.

Java 플랫폼에서 지원되는 문자 세트는 다음과 같습니다.

  • StandardCharsets.ISO_8859_1
  • StandardCharsets.US_ASCII
  • StandardCharsets.UTF_16
  • StandardCharsets.UTF_16BE
  • StandardCharsets.UTF_16LE

정확한 인코딩을 기억하지 못하는 경우, 우리 플랫폼은 해당 특수 문자를 적절하게 변환할 수 없습니다. 이 문제는 ' UTF-8 '를 문자 인코딩으로 사용합니다. Java는 문자 인코딩을 허용하는 String 클래스에 또 다른 오버로드된 생성자를 제공합니다.

 new String(byte[], 'character encoding'); 

다음 예에서는 StandardCharset.UTF_8 인코딩을 지정합니다.

문자열을 열거형으로 변환
 import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1 { public static void main(String[] args) { try { byte[] b = 'Morning'.getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with 'UTF-8' encoding System.out.println(string); } catch(Exception e) { e.printStackTrace(); } } } 

산출:

Java에서 바이트 배열을 문자열로 변환하는 방법

다음 예에서는 바이트 배열을 생성하는 동안 char을 사용했습니다. 오토박싱 때문에 작동합니다. char 'T'는 바이트 배열 등에서 84로 변환됩니다. 이것이 두 바이트 배열의 출력이 동일한 이유입니다.

 public class ByteArraytoStringExample2 { public static void main(String[] args) { byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O','L','O','G','Y'}; //byte array of characters byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to String String str = new String(byteArray1); System.out.println(s); System.out.println(str); } } 

산출:

현재까지의 변환기 문자열
Java에서 바이트 배열을 문자열로 변환하는 방법

String 클래스에는 바이트 배열과 Charset을 인수로 전달할 수 있는 생성자도 있습니다. 따라서 다음 명령문을 사용하여 Java에서 바이트 배열을 문자열로 변환할 수도 있습니다.

 String str = new String(byteArray, StandardCharsets.UTF_8) 

String 클래스에는 바이트 배열의 하위 집합을 String으로 변환하는 생성자도 있습니다.

 String(byte[] bytes, int offset, int length, String charsetName) 

다른 인코딩이 사용되는 또 다른 예를 살펴보겠습니다.

 import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3 { public static void main(String args[]) { try { byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code String utf = new String(bytes, 'UTF-8'); //converts into UTF-8 encoding String cp1252 = new String(bytes, 'Cp1252'); //conversts into Cp1252 endcoding //converts into windows-1252 encoding String windows1252 = new String(bytes, 'Windows-1252'); System.out.println('String in UTF-8 encoding : ' + utf); System.out.println('String in Cp1252 encoding : ' + cp1252); System.out.println('string Windows-1252 encoding : ' + windows1252); } catch(Exception e) { e.printStackTrace(); } } } 

산출:

Java에서 바이트 배열을 문자열로 변환하는 방법