Закодировать строку в UTF-8
У меня есть строка с "-" характер и у меня есть некоторые проблемы с ним. Мне нужно закодировать эту строку в кодировку UTF-8. Я пробовал это таким образом, но это не работает:
byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");
Как мне закодировать эту строку в utf-8?
10 ответов:
Stringобъекты в Java используют кодировку UTF-16, которую нельзя изменить.единственное, что может иметь другую кодировку-это
byte[]. Так что если вам нужны данные UTF-8, то вам нужноbyte[]. Если у вас естьStringчто содержит неожиданные данные, то проблема в каком-то более раннем месте, которое неправильно преобразовало некоторые двоичные данные вString(т. е. он использует неверную кодировку).
использовать
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-1private 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