1

私はWindowsアプリケーションを書いています。jar ファイルからのバイトの送受信に問題があります。

jar ファイルから 2 バイトが送信されます [ie. !©]

1バイト目は文字コード0~127までなので正しく読めます。しかし、2 バイト目: 拡張 ASCII は、jar ファイルから "©" と言うと、C# アプリケーションでは �</p>

同様に、「©」を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 の両方で同じ文字コードを取得するにはどうすればよいですか??

4

1 に答える 1

0

エンコーディングに問題があると思います。これを試してください:

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

バイト配列を確認すると、21 (これは !) と 3f の 2 バイトが保持されていることがわかります。2 番目のバイトは必要なものではありません。著作権記号には複数のバイトが必要ですが、ASCII は 1 バイトです。

使用する

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

2 つの文字に対して 3 バイトを提供します。

于 2012-08-24T12:01:58.837 に答える