Проблема кодирования между сервером C # TCP и клиентом Java TCP - PullRequest
3 голосов
/ 28 августа 2011

У меня возникла проблема с кодировкой, из-за которой я не могу найти правильное решение.

У меня есть сервер C # TCP, работающий как оконная служба, которая получает и отвечает на XML, проблема сводится кпри передаче в выводе специальных символов, таких как испанские символы с акцентами (например, á, é, í и др.).

Ответ сервера кодируется как UTF-8, а клиент java читает с использованием UTF-8.Но когда я печатаю его вывод, символ совершенно другой.

Эта проблема возникает только в клиенте Java (клиент C # TCP работает как положено).

Ниже приведен фрагмент кода сервера, который показываетпроблема с кодировкой: C # Server

   byte[] destBytes = System.Text.Encoding.UTF8.GetBytes("á");
    try
    {
       clientStream.Write(destBytes, 0, destBytes.Length);
       clientStream.Flush();
    }catch (Exception ex)
    {
       LogErrorMessage("Error en SendResponseToClient: Detalle::", ex);
    }

Java-клиент:

socket.connect(new InetSocketAddress(param.getServerIp(), param.getPort()), 20000);
InputStream sockInp = socket.getInputStream();
InputStreamReader streamReader = new InputStreamReader(sockInp, Charset.forName("UTF-8"));
sockReader =  new BufferedReader(streamReader);
String tmp = null;
while((tmp = sockReader.readLine()) != null){
  System.out.println(tmp);
}

Для этого простого теста вывод шоу:

ß

Я провел некоторое тестированиераспечатывать байт [] на каждом языке и в то время как на C # выводить как: 195, 161

В байте java [] читать печатать как: -61, -95

Придется ли этоделать со Подписанным (Java), Беззнаковым (C #) байтового типа?.

Любая обратная связь с благодарностью.

Ответы [ 2 ]

1 голос
/ 28 августа 2011

Мне кажется, что это проблема с порядком байтов ... Вы можете проверить это путем обращения байтов в Java перед печатью строки ...

, что обычно решается путем включения спецификации ... см.http://de.wikipedia.org/wiki/Byte_Order_Mark

0 голосов
/ 28 августа 2011

Вы уверены, что это не символ Юникода, который вы пытаетесь кодировать в байты как данные UTF-8?

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

Как проверить приложение на правильное кодирование (например, UTF-8)

...