Вопрос-ответ

Encode String to UTF-8

Кодирование строки в UTF-8

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

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

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

Переведено автоматически
Ответ 1

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

ByteBuffer byteBuffer = StandardCharsets.UTF_8.encode(myString)
Ответ 2

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

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

* Что касается реализации, String можно внутренне использовать кодировку ISO-8859-1, закодированную byte[] когда диапазон символов соответствует ей, но это специфичная для реализации оптимизация, которая не видна пользователям String (т. Е. вы никогда не заметите, если не покопаетесь в исходном коде или не воспользуетесь отражением для изучения String объекта).

Ответ 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.

2023-11-01 05:46 java