Отправить строку Unicode из C # в Java - PullRequest
1 голос
/ 25 октября 2011

На стороне C # у меня есть этот код для отправки Unicode String

    byte[] b = System.Text.Encoding.UTF8.GetBytes(str);
    string unicode = System.Text.Encoding.UTF8.GetString(b);
    //Plus \r\n for end of send string
    SendString(unicode + "\r\n");


   void SendString(String message)
    {
        byte[] buffer = Encoding.ASCII.GetBytes(message);
        AsyncCallback ac = new AsyncCallback(SendStreamMsg);
        tcpClient.GetStream().BeginWrite(buffer, 0, buffer.Length, ac, null);
    }

    private void SendStreamMsg(IAsyncResult ar)
    {
        tcpClient.GetStream().EndWrite(ar);
        tcpClient.GetStream().Flush(); //data send back to java
    }

и это сторона Java

     Charset utf8 = Charset.forName("UTF-8");
        bufferReader = new BufferedReader(new InputStreamReader(
                sockServer.getInputStream(),utf8));
     String message = br.readLine();

Проблема в том, что я не могу получить строку Unicode на стороне Java. Как можно решить?

1 Ответ

3 голосов
/ 25 октября 2011

Ваш вопрос немного двусмысленный; Вы говорите, что не можете получить строку Unicode на стороне Java - Вы получаете ошибку или строку ASCII? Я предполагаю, что вы получаете строку ASCII, потому что это то, что отправляет ваш метод SendString (), но, возможно, есть дополнительные проблемы.

Ваш метод SendString () начинается с преобразования переданной строки в массив байтов в кодировке ASCII; Измените ASCII на UTF8, и вы должны отправить UTF-8:

void SendString(String message)
{
    byte[] buffer = Encoding.UTF8.GetBytes(message);
    AsyncCallback ac = new AsyncCallback(SendStreamMsg);
    tcpClient.GetStream().BeginWrite(buffer, 0, buffer.Length, ac, null);
}

У вас, похоже, слишком много ненужной работы по кодированию выше определения этого метода, но без дополнительной информации я не могу гарантировать, что работа над кодировкой над ней не нужна ...

...