Кодировать строку в UTF-8
У меня есть строка с символом «-», и у меня есть некоторые проблемы с ней. Мне нужно кодировать эту кодировку String для UTF-8. Я пробовал это таким образом, но он не работает:
byte ptext[] = myString.getBytes(); String value = new String(ptext, "UTF-8");
Как кодировать эту строку в utf-8?
- Проблемы с символами UTF-8; я не вижу того, что я хранил
- Ruby on Rails 3, несовместимые кодировки символов: UTF-8 и ASCII-8BIT с i18n
- Создать файл в UTF-8 с помощью FileWriter (Java)?
- Установка кодировки символов Java по умолчанию?
- как изменить кодировку исходного файла в проекте csharp (visual studio / msbuild machine)?
- Световая библиотека Unicode
- Ручное преобразование кодов Unicode в UTF-8 и UTF-16
- R tm заблокировать недопустимый ввод в 'utf8towcs'
- Как проводить поиск Accent Sensitive в MySql
- Устаревший заголовок
- Как изменить тип кодировки по умолчанию, используемый Thunderbird при создании нового электронного письма?
- Могу ли я установить кодовую страницу KiTTY по умолчанию для UTF-8 вместо ISO-8859-1?
- Создание допустимого XML с кодировкой Java и 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"));