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

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

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

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

Ответ 1

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

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

Ответ 2

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

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Через мгновение я прошел через эту проблему и сумел решить ее следующим образом

сначала мне нужно импортировать

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);

Ответ 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) {
    //...
}

Ответ 9

У меня есть код ниже, чтобы закодировать специальный символ, указав формат кодировки.

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");

Ответ 10

Краткое пошаговое руководство по настройке кодировки по умолчанию NetBeans UTF-8. В результате NetBeans создаст все новые файлы в кодировке UTF-8.

Пошаговое руководство по кодировке UTF-8 по умолчанию в NetBeans

  • Перейдите в папку etc в каталоге установки NetBeans
  • Изменить файл netbeans.conf
  • Найти строку netbeans_default_options
  • Добавьте -J-Dfile.encoding = UTF-8 внутри кавычек внутри этой строки

    (пример: netbeans_default_options="-J-Dfile.encoding=UTF-8")

  • Перезапустите NetBeans

Вы устанавливаете кодировку по умолчанию NetBeans UTF-8.

Ваши netbeans_default_options могут содержать дополнительные параметры внутри кавычек. В таком случае добавьте -J-Dfile.encoding = UTF-8 в конце строки. Отделите его пробелом от других параметров.

Пример:

netbeans_default_options="-J-client -J-Xss128m -J-Xms256m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true -J-Dfile.encoding=UTF-8"

здесь ссылка для получения дополнительной информации

Ответ 11

Это решило мою проблему

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