2010-07-27 52 views
0

是否有人知道哪些是正確的方式來獲取這些字節中的實際文本? 我在這裏做錯了事。SharpPcap Encoding.UTF8.GetBytes

而另一個問題:是utf-8最通用的編碼,這將顯示大多數字符的正確?

TY

private void device_OnPacketArrival(object sender, SharpPcap.CaptureEventArgs e) 
    { 
     string str = string.Empty; 

     var time = e.Packet.Timeval.Date; 
     var len = e.Packet.Data.Length; 

     str = "time.Hour: " + time.Hour + " time.Minute: " + time.Minute + " time.Second: " + time.Second + " time.Millisecond: " + time.Millisecond + "len: " + len; 
     str += Environment.NewLine + e.Packet.ToString(); 
     str += Environment.NewLine + " Message: " + BitConverter.ToString(e.Packet.Data); 
     //str += e.Packet.Data + Environment.NewLine + Environment.NewLine; 

     Packet p = Packet.ParsePacket(e.Packet); 
     str += e.Packet.Data + Environment.NewLine + Environment.NewLine; 

     byte[] utf8Bytes = Encoding.Convert(Encoding.Unicode, Encoding.UTF8, e.Packet.Data); 

     str += Encoding.UTF8.GetBytes(utf8Bytes.ToString()).ToString(); 
     //txtOutput.Text += "time.Hour: " + time.Hour + "time.Minute: " + time.Minute + "time.Second: " + time.Second + "time.Millisecond:" + time.Millisecond + "len:" + len; 
     //txtOutput.Text += e.Packet.ToString(); 
     //txtOutput.Text += Environment.NewLine; 

     WriteToFile(str,null); 
     // WriteToFile("",c); 

回答

0

包包含二進制數據,而不是文本數據。

可以有包含文本數據包的部分,但你應該只嘗試把這些部分文本(而不是整個數據包的數據),你應該知道什麼是文本編碼。

沒有「通用」編碼。 UTF8比ASCII更通用,因爲ASCII中的所有文本都將使用UTF8進行轉換,但通常不存在「通用」編碼,您應該知道數據的編碼是什麼。

0

你要尋找的是Encoding.UTF8.GetString()如果數據實際上是UTF-8。

這一切都取決於數據字段包含。如果它是另一個協議負載,則需要使用SharpPcap/Packet.Net解析器解析它,或者,如果特定解析器不存在,則需要查找協議規範並從您的解析器構建自己的解析器那。

所有的報文都不過是無意義的數據的一個大的字節數組,直到它可以被解析。有時編寫解析器很容易,有時可能需要數週時間(取決於協議的複雜性,或者解析特定協議的工具已經存在)。 SharpPcap/Packet.Net是用於解析數據包數據的相當廣泛的協議,但它遠遠不能覆蓋所有已知/使用的協議。