【问题标题】:Java to C# - sending/reading byte from jar server to C# clientJava 到 C# - 从 jar 服务器向 C# 客户端发送/读取字节
【发布时间】:2012-08-24 10:31:38
【问题描述】:

我正在编写一个 Windows 应用程序。从 jar 文件发送/接收字节时遇到问题。

jar 文件向我发送一个 2 字节的 [i.e.. !©]

我可以正确读取第一个字节,因为它位于字符代码 0-127 内。 但是对于第 2 个字节:扩展的 ASCII 表示来自 jar 文件的“©”,它以 .

的形式进入 C# 应用程序

类似地,当我将“©”发送到 jar 文件时,jar 将其读取为 �

请指导我如何解决这个问题。

我正在使用此代码从 jar 中读取字节:

while (m_socClient.Available > 0)
{
    byte[] buffer = new byte[2048];
    int iRx = m_socClient.Receive(buffer);
    char[] chars = new char[iRx];
    System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
    int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
    System.String szData = new System.String(chars);
    byte[] q1 = Encoding.GetEncoding("Windows-1252").GetBytes(szData.Substring(0, 1));
    byte[] r1 = Encoding.GetEncoding("Windows-1252").GetBytes(szData.Substring(1, 1));
    int qu = Convert.ToInt32(q1[0].ToString());
    int re = Convert.ToInt32(r1[0].ToString());   
} 

我正在使用此代码将字节发送到 jar:

var q = Encoding.GetEncoding("Windows-1252").GetString(new byte[] { quotient });
var r = Encoding.GetEncoding("Windows-1252").GetString(new byte[] { remainder });
Object objData_h = q.ToString() + r.ToString();
byte[] byData_h = System.Text.Encoding.ASCII.GetBytes(objData_h.ToString());
m_socClient.Send(byData_h); // send the data to jar file.

请帮帮我好吗?如何在 C# 和 java 中获得相同的字符代码??

【问题讨论】:

  • 'jar 文件发送给我'没有意义,我想你是通过 TCP 套接字检索数据,对吗?
  • 您收到一些数据并将其解释为 UTF-8 编码文本。然后使用 Windows-1252 编码对其进行解码。 UTF-8 中的字符编码与 Windows-1252 中的编码不同,这可以解释为什么字节不同。
  • @home:是的,我正在通过 tcp 获取数据。

标签: c# java winforms ascii extended-ascii


【解决方案1】:

我认为您的编码有问题。尝试这样做:

var q = new char[] { '!', '\u00a9'}; // u00a9 is copyright symbol in unicode.
byte[] b = System.Text.Encoding.ASCII.GetBytes(q); 

检查字节数组,您会看到它包含两个字节,21(即!)和 3f,其中第二个不是您想要的。版权标志需要多于一个字节,但 ascii 是单字节。

使用

byte[] b = System.Text.Encoding.UTF8.GetBytes(q);

为这两个字符提供三个字节。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 2018-03-02
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多