Ошибка, которую вы видите здесь, заключается в том, что сервер Linux по умолчанию отправляет строку как UTF-8.В UTF-8 обычные символы ASCII кодируются одним байтом.Символ § кодируется как два байта.Если вы декодируете это с помощью CP-1252, вы увидите §, потому что два байта интерпретируются как два отдельных символа.
Сервер Windows будет использовать http://en.wikipedia.org/wiki/Windows-1252,, который может кодировать § как одинбайт.
Если вы используете свой собственный протокол, вы должны указать, какую кодировку символов использовать по проводам.Я предлагаю вам по умолчанию UTF-8 (интернет-стандарт).При отправке строки вы должны использовать "xyz".getBytes("UTF-8")
.Если вы получаете строку, вы должны использовать new String(bytes, "UTF-8")
.
Если вы используете HTTP, ваш клиент должен соблюдать заголовки в разделе 14 спецификации HTTP.Я предлагаю вам использовать реализованный HTTP-клиент, такой как Apache Commons HTTPClient, или встроенный J2SE.На стороне сервера вы должны использовать метод response.getWriter()
в Сервлете, чтобы получить средство записи, которое будет автоматически использовать согласованную кодировку.Обратите внимание, что вы не можете просто выводить байты, поскольку сервер и клиент могли договориться о другой кодировке передачи для потока HTTP!