2016-10-12 2 views
0

Ich habe eine Funktion, die Daten aus dem Puffer wird und wandelt sie in Zeichenfolge wie Sie sehen können:erhalten Unicode-Puffer Bytes in C# gibt '??????'

public string GetParameters(byte[] buf) 
{ 
    string result = System.Text.UnicodeEncoding.Unicode.GetString(buf); 
    return result; 
} 

Eine andere Anwendung sendet eine Farsi Zeichenfolge zu puffern und meine Anwendung sollten diese Daten bekommen, aber Funktion meiner Anwendung gibt diese :

㨲께裙듘�����¯ 

Warum? enter image description here

Wie kann ich empfangen Datenpuffer: ich diese definieren:

public byte[] dataBuffer = new byte[4000]; 

Ich habe diese Funktion:

public void WaitForData(System.Net.Sockets.Socket soc) 
     { 
      try 
      { 
       if (pfnWorkerCallBack == null) 
       { 
        // Specify the call back function which is to be 
        // invoked when there is any write activity by the 
        // connected client 
        pfnWorkerCallBack = new AsyncCallback(OnDataReceived); 
       } 
       SocketPacket theSocPkt = new SocketPacket(); 
       theSocPkt.m_currentSocket = soc; 
       // Start receiving any data written by the connected client 
       // asynchronously 
       soc.BeginReceive(theSocPkt.dataBuffer, 0, 
            theSocPkt.dataBuffer.Length, 
            SocketFlags.None, 
            pfnWorkerCallBack, 
            theSocPkt); 
      } 
      catch (Exception qqq) 
      { 

      } 

     } 

Und ein anderes:

public void OnDataReceived(IAsyncResult asyn) 
     { 
      try 
      { 
       SocketPacket socketData = (SocketPacket)asyn.AsyncState; 

       int iRx = 0; 
       // Complete the BeginReceive() asynchronous call by EndReceive() method 
       // which will return the number of characters written to the stream 
       // by the client 
       iRx = socketData.m_currentSocket.EndReceive(asyn); 
       string res = GetParameters(socketData.dataBuffer); 
} 
+0

Verwenden Sie 'UTF32' anstelle von' Unicode' –

+2

Genau 4k Bytes ist eine verdächtig runde Zahl. Sie müssen nur den Teil des Puffers dekodieren, in dem die Daten enthalten sind. –

+0

@M.kazemAkhgary utf32 gibt Folgendes zurück: –

Antwort

2

Versuchen Sie UTF-8 zu verwenden:

string result = System.Text.UnicodeEncoding.UTF8.GetString(buf); 

, die wie Farsi mir aussieht. (Aber ich spreche kein Farsi.)

Die Unterschiede zwischen Unicode und UTF-8 werden hier genannt: UTF-8 vs. Unicode

Wesentlichen die Länge eines Zeichens macht den Unterschied.

+0

Vielen Dank Sie es funktioniert –

+0

Es sagt nur خشش آمییی in Farsi, dass es Willkommen in Englisch bedeutet :) –

+1

@EhsanAkbar Froh, dass ich Ihnen helfen konnte. :-) – haindl

-1

string myDecodedString = Encoding.GetEncoding("1256").GetString(buf)

+0

{"'1256' ist kein unterstützter Codierungsname. Informationen zum Definieren einer benutzerdefinierten Codierung finden Sie in der Dokumentation zur Encoding.RegisterProvider-Methode. \ R \ nParametername: name"} –

Verwandte Themen