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