Чтение строк UTF8 с сервера через http с использованием MIDP

Я хочу читать строки UTF-8 с сервера, которым я владею, используя java MIDP. Мой сервер отправляет данные UTF-8. Следующий код приближается:

        c = (StreamConnection) Connector.open(
             myServer, Connector.READ_WRITE);
        InputStream is = c.openInputStream();
        StringBuffer sb = new StringBuffer();
        int ch;
        while((ch = is.read()) != -1)
            sb.append((char)ch + "->" + ch + "\n");

Я печатаю char и его код для целей отладки. Я думаю, что здесь читаются символы ASCII, поэтому, когда у меня есть какой-то символ с кодом выше 127, я получаю два символа, как в двух примерах ниже:

буква А. Код UTF E1 (шестнадцатеричный). Я получаю 195, а затем 161

буква о. Код UTF F4 (шестнадцатеричный). Я получаю 195, а затем 180

Мой вопрос в том, есть ли способ напрямую читать символы UTF. Я нашел несколько решений в Интернете, но ни одно из них не подходит для MIDP.


person Ricardo Acras    schedule 08.07.2009    source источник


Ответы (1)


Вместо чтения байтов читайте символы. Используйте ссылку InputStreamReader API для преобразования байтов в символы и запуска через кодировщик UTF-8. Он должен поддерживаться как часть профиля JavaME CLDC (JSR 30); на это указывает ссылка.

Попробуйте что-то вроде этого:

c = (StreamConnection) Connector.open(
         myServer, Connector.READ_WRITE);
Reader r = new InputStreamReader(c.openInputStream(), "UTF-8");
StringBuffer sb = new StringBuffer();
int ch;
while((ch = r.read()) != -1)
    sb.append((char)ch + "->" + ch + "\n");
person lavinio    schedule 08.07.2009
comment
Спасибо за отличный ответ, это очень помогло Мэг. Один небольшой комментарий к этой строке: Reader r = InputStreamReader(c.openInputStream(), "UTF-8");, у меня это работает, только если я использую это следующим образом: Reader r = new InputStreamReader(c.openInputStream(), "UTF-8"); Еще раз спасибо!!!! - person ; 30.12.2009