0

これらのバイトで実際のテキストを取得する正しい方法を知っている人はいますか? 私はここで何か間違ったことをします。

そして別の質問: utf-8 は、ほとんどの文字を正しく表示する最も一般的なエンコーディングですか?

タイ

    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);
4

2 に答える 2

0

パケットには、テキスト データではなく、バイナリ データが含まれます。

パケットの一部にテキストが含まれている可能性がありますが、これらの部分のみをテキストに変換してみてください (パケット データ全体ではなく)、テキスト エンコーディングとは何かを知っておく必要があります。

「一般的な」エンコーディングはありません。UTF8 は、ASCII のすべてのテキストが UTF8 を使用して変換されるという意味で ASCII よりも一般的ですが、一般に「一般的な」エンコーディングはなく、データのエンコーディングが何であるかを知っておく必要があります。

于 2010-07-30T06:00:43.427 に答える
0

データが実際に UTF-8 である場合、探しているのは Encoding.UTF8.GetString() です。

それはすべて、Data フィールドに何が含まれているかによって異なります。別のプロトコル ペイロードの場合は、SharpPcap/Packet.Net パーサーを使用して解析する必要があります。特定のパーサーがまだ存在しない場合は、プロトコル仕様を調べて独自のパーサーを構築する必要があります。それ。

すべての受信パケットは、解析されるまで意味のないデータの大きなバイト配列にすぎません。パーサーを書くのは簡単な場合もあれば、何週間もかかる場合もあります (プロトコルの複雑さや、特定のプロトコルを解析するために既に存在するツールによって異なります)。SharpPcap/Packet.Net は、パケット データを解析するためのかなり広範なプロトコルですが、存在する一般的に知られている/使用されているすべてのプロトコルをカバーするにはほど遠いものです。

于 2010-11-10T07:37:56.913 に答える