1

C#側では、Unicode文字列を送信するためのこのコードがあります

    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();

問題は、Java側でUnicode文字列を受信できないことです。どうすれば解決できますか?

4

1 に答える 1

3

あなたの質問は少し曖昧です。Java側でUnicode文字列を受信できないと言います-エラーが発生していますか、それともASCII文字列を取得していますか?SendString()メソッドが送信しているのはASCII文字列であるため、ASCII文字列を取得していると想定していますが、追加の問題がある可能性があります。

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);
}

また、このメソッド定義の上に不要なエンコード作業がたくさんあるようですが、背景がなければ、それ以上のエンコード作業が不要であることを保証することはできません...

于 2011-10-25T02:02:18.610 に答える