Закодировать строку в UTF-8



У меня есть строка с "-" характер и у меня есть некоторые проблемы с ним. Мне нужно закодировать эту строку в кодировку UTF-8. Я пробовал это таким образом, но это не работает:



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


Как мне закодировать эту строку в utf-8?

566   10  

10 ответов:

String объекты в Java используют кодировку UTF-16, которую нельзя изменить.

единственное, что может иметь другую кодировку-это byte[]. Так что если вам нужны данные UTF-8, то вам нужно byte[]. Если у вас есть String что содержит неожиданные данные, то проблема в каком-то более раннем месте, которое неправильно преобразовало некоторые двоичные данные в String (т. е. он использует неверную кодировку).

Как насчет использования

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)

использовать byte[] ptext = String.getBytes("UTF-8"); вместо getBytes(). getBytes() использует так называемую "кодировку по умолчанию", который не может быть UTF-8.

в 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");
    //....
}

строка Java внутренне всегда кодируется в UTF-16-но вы действительно должны думать об этом так: кодировка-это способ перевода между строками и байтами.

Так что если у вас есть проблема с кодировкой, к тому времени, когда у вас есть строка, это слишком поздно, чтобы исправить. Вам нужно исправить место, где вы создаете эту строку из файла, БД или сетевого подключения.

вы можете попробовать этот способ.

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

и, если вы хотите прочитать из текстового файла с кодировкой" ISO-8859-1":

String line;
String f = "C:\MyPath\MyFile.txt";
try {
    BufferedReader br = Files.newBufferedReader(Paths.get(f), Charset.forName("ISO-8859-1"));
    while ((line = br.readLine()) != null) {
        System.out.println(new String(line.getBytes("UTF-8")));
    }
} catch (IOException ex) {
    //...
}

Я использую ниже код для кодирования специальных символов, задавая формат кодирования.

String text = "This is an example é";
byte[] byteText = text.getBytes(Charset.forName("UTF-8"));
//To get original string from byte.
String originalString= new String(byteText , "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);

проблема

    String inputText = "some text with escaped chars"
    InputStream is = new ByteArrayInputStream(inputText.getBytes("UTF-8"));

Comments

    Ничего не найдено.