[java] 문자열을 UTF-8로 인코딩

“ñ”문자가있는 문자열이 있는데 문제가 있습니다. 이 문자열을 UTF-8 인코딩으로 인코딩해야합니다. 이 방법으로 시도했지만 작동하지 않습니다.

byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");

해당 문자열을 utf-8로 어떻게 인코딩합니까?



답변

String Java의 객체는 수정할 수없는 UTF-16 인코딩을 사용합니다.

다른 인코딩을 가질 수있는 유일한 것은입니다 byte[]. 따라서 UTF-8 데이터가 필요한 경우가 필요합니다 byte[]. String예상치 못한 데이터가 포함 된 파일 이있는 경우 일부 바이너리 데이터를 잘못 변환 한 이전 위치에 문제가있는 것입니다 String(즉, 잘못된 인코딩을 사용하고 있음).


답변

사용은 어떻습니까

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)


답변

Java7에서는 다음을 사용할 수 있습니다.

import static java.nio.charset.StandardCharsets.*;

byte[] ptext = myString.getBytes(ISO_8859_1);
String value = new String(ptext, UTF_8); 

이것은 getBytes(String)선언하지 않는 것보다 장점이 있습니다 throws UnsupportedEncodingException.

이전 Java 버전을 사용하는 경우 문자 세트 상수를 직접 선언 할 수 있습니다.

import java.nio.charset.Charset;

public class StandardCharsets {
    public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1");
    public static final Charset UTF_8 = Charset.forName("UTF-8");
    //....
}


답변

byte[] ptext = String.getBytes("UTF-8");대신에 사용하십시오 getBytes(). getBytes()UTF-8이 아닌 소위 “기본 인코딩”을 사용합니다.


답변

Java 문자열은 내부적으로 항상 UTF-16으로 인코딩되지만 실제로 다음과 같이 생각해야합니다. 인코딩은 문자열과 바이트 사이를 변환하는 방법입니다.

따라서 인코딩 문제가있는 경우 String을 사용할 때까지 해결하기에는 너무 늦습니다. 파일, DB 또는 네트워크 연결에서 해당 문자열을 생성하는 장소를 수정해야합니다.


답변

이 방법으로 시도 할 수 있습니다.

byte ptext[] = myString.getBytes("ISO-8859-1");
String value = new String(ptext, "UTF-8"); 


답변

잠시 후이 문제를 겪고 다음과 같은 방법으로 문제를 해결할 수있었습니다.

먼저 가져와야합니다

import java.nio.charset.Charset;

그런 다음 사용할 상수를 선언 UTF-8하고ISO-8859-1

private static final Charset UTF_8 = Charset.forName("UTF-8");
private static final Charset ISO = Charset.forName("ISO-8859-1");

그런 다음 다음과 같은 방식으로 사용할 수 있습니다.

String textwithaccent="Thís ís a text with accent";
String textwithletter="Ñandú";

text1 = new String(textwithaccent.getBytes(ISO), UTF_8);
text2 = new String(textwithletter.getBytes(ISO),UTF_8);