0

私は ICQ プロトコルを使用していますが、特殊文字 (fxp 発音記号) に問題があることがわかりました。私は別のエンコーディングを使用してそのICQを読みました(覚えていればCP-1251)。

文字列をテキストでデコードしてエンコードを修正するにはどうすればよいですか?

UTF8Encoding クラスを使用してみましたが、成功しませんでした。

ICQ-sharp ライブラリの使用。

    private void ParseMessage (string uin, byte[] data)
    {
        ushort capabilities_length = LittleEndianBitConverter.Big.ToUInt16 (data, 2);
        ushort msg_tlv_length = LittleEndianBitConverter.Big.ToUInt16 (data, 6 + capabilities_length);
        string message = Encoding.UTF8.GetString (data, 12 + capabilities_length, msg_tlv_length - 4);

        Debug.WriteLine(message);
    }

同じクライアントを使用して連絡する場合は問題ありませんが、そうでない場合は、分音符号のある着信メッセージと発信メッセージが読めないだけです。

私は(これを使用して - > https://stackoverflow.com/a/12853721/846232)それが BigEndianUnicode エンコーディングであると判断しました。ただし、文字列に分音記号が含まれていない場合は、判読できません (漢字)。しかし、分音符号なしでテキストに UTF8 エンコーディングを使用すると、問題ありません。しかし、それが常に正しくエンコードされる方法がわかりません。

4

1 に答える 1

1

UTF-8 が機能する場合 (つまり、「英語」または任意の US-ASCII 文字で機能する場合)、UTF-16 はありません。Latin1 (または Windows-1252、Microsoft のバリアント)、またはたとえば Windows-1251 または Windows-1250 は完全に可能ですが、これらは分音記号のないラテン文字を含む最初の部分が同じであるためです。

次のようにデコードします。

var encoding = Encoding.GetEncoding("Windows-1250");
string message = encoding.GetString(data, 12 + capabilities_length, msg_tlv_length - 4);
于 2012-10-27T20:09:51.230 に答える