0

我正在使用 ICQ 协议,但发现特殊字母(fxp 变音符号)存在问题。我使用另一种编码(如果我记得的话是 CP-1251)读取了那个 ICQ。

如何使用文本解码字符串以正确编码?

我试过使用 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 回答