Помогите отображать символы java на разных языках - PullRequest
0 голосов
/ 15 марта 2011

Я отправляю запрос в веб-службу, и полученный ответ может быть на любом языке: английском, французском, арабском, японском и т. Д.

У меня проблема с отображениемразные языки правильно, однако.Например, я получаю:

translation: ä½ å¥½

Вместо:

translation: 你好

Я предполагаю, что я неправильно кодирую в своем HTTP-запросе / ответе.Может кто-нибудь сказать мне, что я могу делать не так?Вот код, где я получаю ответ HTTP:

        baos = new ByteArrayOutputStream();

        InputStream responseData = connection.openInputStream();
        byte[] buffer = new byte[20000];
        int bytesRead = 0;
        while ((bytesRead = responseData.read(buffer)) > 0) {
            baos.write(buffer, 0, bytesRead);
        }
        System.out.println(new String(baos.toByteArray()));

Спасибо!

Ответы [ 5 ]

1 голос
/ 15 марта 2011
new String(baos.toByteArray());

будет интерпретировать байт [] с набором символов вашей платформы по умолчанию. Из документации :

Создает новую строку путем декодирования указанного массива байтов с использованием кодировки по умолчанию платформы.

Эти байты должны интерпретироваться декодером, который совместим с набором символов, который отправляет вам сервер. Часто это указывается в заголовке HTTP Content-type.

1 голос
/ 15 марта 2011

Я думаю, вы должны использовать метод toString(String charsetName) из ByteArrayOutputStream.

Примерно так:

System.out.println(baos.toString("UTF-8"));

Конечно, вы должны использовать такую ​​же кодировку на сервере и на клиенте.

Надеюсь, это поможет.

1 голос
/ 15 марта 2011

В конце при печати попробуйте

System.out.println(new String(baos.toByteArray(), Charset.forName("UTF-8")));

0 голосов
/ 15 марта 2011

Я думаю, вам нужно использовать InputStreamReader и OutputStreamWriter. Эти классы позволяют вам указать кодировку. Например:

Writer out   = new BufferedWriter(new OutputStreamWriter(System.out, "UTF-8"));
out.write(something);
0 голосов
/ 15 марта 2011

in

System.out.println(new String(baos.toByteArray()))

вам необходимо указать правильный Charset для new String(byte bytes[], Charset charset).

. Вы должны знать, какой Charset использовать (т.е. он должен быть отправлен с ответом).По умолчанию используется UTF-8, но это не распространяется на китайский, японский, арабский, иврит и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...