2016-10-12 5 views
0

私は、バッファからデータを取得し、あなたが見ることができるように文字列に変換する機能を持っている:C#でunicodeバッファバイトを取得すると '??????'

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

別のアプリケーションがバッファするFarsi文字列を送信し、私のアプリケーションは、このデータを取得する必要がありますが、自分のアプリケーションの機能は、これを返します:

㨲께裙듘�����¯ 

なぜですか?私はこの機能を持っている

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

: 私はこれを定義します。

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) 
      { 

      } 

     } 

そしてもう一つ:

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

「Unicode」ではなく「UTF32」を使用してください。 –

+2

正確に4kバイトは、疑いなく丸められた数字です。 –

+0

@ M.kazemAkhgary utf32はこれを返します: –

答えて

2

はUTF-8を使用してみてください。 (しかし、私はペルシア語を話すことはありません。)

UnicodeとUTF-8との違いはここに記載されている:

UTF-8 vs. Unicodeは基本的に文字の長さが違いになります。

+0

あなたはそれが動作する –

+0

それは英語で歓迎することを意味するペルシャ語で唯一のخوشآمدیدを言う:) –

+1

@EhsanAkbar喜んで私はあなたを助けることができます。 :-) – haindl

-1

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

どのように私は、バッファデータを受信することができる enter image description here

私にはペルシア語のように見えます

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

+0

{"'1256'はサポートされているエンコーディング名ではありませんカスタムエンコーディングの定義については、Encoding.RegisterProviderメソッドのドキュメントを参照してください。\ r \ nパラメータ名:name"} –

関連する問題