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

У меня есть строка с символом «-», и у меня есть некоторые проблемы с ней. Мне нужно кодировать эту кодировку String для 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) 

Использовать 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, но вы действительно должны думать об этом так: кодирование – это способ перевода между строками и байтами.

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

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

 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")); 
  • Как заставить MySQL правильно обрабатывать UTF-8
  • как читать данные в формате utf-8 в R?
  • Могу ли я экспортировать данные Excel с UTF-8 без спецификации?
  • установка UTF-8 в java и csv-файле
  • Форматирование командной строки MySQL с помощью UTF8
  • Сила кодируется из US-ASCII в UTF-8 (iconv)
  • Сколько символов может кодировать UTF-8?
  • Как исправить кодировку символа файла?
  • Как работает кодировка с переменной шириной UTF-8?
  • Как я могу использовать UTF-8 в Linux из Windows 7 через PuTTY?
  • Могу ли я настроить KiTTY для отправки нажатия F7 вместо того, чтобы поднимать диалог печати при нажатии кнопки F7?
  • Давайте будем гением компьютера.