将unicode字符串从c#发送到Java

本文关键字:Java unicode 字符串 | 更新日期: 2023-09-27 18:12:22

在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字符串。如何解决?

将unicode字符串从c#发送到Java

你的问题有点模棱两可;您说您无法在Java端接收unicode字符串-您是得到一个错误,还是得到一个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);
}

你似乎也有很多不必要的编码工作上面这个方法定义,但没有更多的背景知识,我不能保证上面的编码工作是不必要的…