特殊字符的ICQ编码

时间:2012-10-26 00:24:29

标签: c# character-encoding icq

我正在使用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编码就可以了。但我不知道怎么做,它将被编码正确。

1 个答案:

答案 0 :(得分: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);