В Java нет такой вещи, как «строка UTF-8». Все в Юникоде.
Когда вы вызываете String.getBytes()
без указания кодировки, которая использует кодировку по умолчанию для платформы - это почти всегда плохая идея.
Вам не нужно ничего делать, чтобы получить правильные символы здесь - запрос должен обрабатывать все это для вас. Если это не так, то, скорее всего, это уже потерянные данные.
Не могли бы вы привести пример того, что на самом деле происходит не так? Укажите значения Unicode символов в строке, которую вы получаете (например, с помощью toCharArray()
, а затем конвертируете каждый char
в int
) и то, что вы ожидали получить.
EDIT: Для того, чтобы диагностировать это, использовать что-то вроде этого:
public static void dumpString(String text) {
for (int i = 0; i < text.length(); i++) {
System.out.println(i + ": " + (int) text.charAt(i));
}
}
Обратите внимание, что это даст десятичного значения каждого символа Unicode. Если у вас есть удобный метод шестнадцатеричной библиотеки, вы можете использовать его, чтобы дать вам шестнадцатеричное значение. Главное, что он сбрасывает символы Unicode в строке.
告 Этот символ, например, должен быть преобразован я получаю 229 145 138 это десятичное представление whichis исправить согласно http://www.ansell-uebersetzungen.com/gbuni.html потому что это шестнадцатеричное представление: E5 91 8A Так что теперь мне нужно его преобразовать в unicode. I –
Итак, на мой взгляд, запрос отправляет правильные символы, но я не могу их прочитать в java, его нужно преобразовать в unicode –
@Rob: Нет, это должно появиться в строке как U + 544A. Представленное шестнадцатеричное представление - это представление UTF-8, которое никогда не будет состоять в том, что находится в самой строке. Вы говорите, что «получите» 229 145 138 - когда вы что-то делаете? Я отредактирую свой ответ с помощью диагностического кода. –