Кодировка специальных символов в ICQ
Я работаю с протоколом ICQ, и я обнаружил проблему со специальными буквами (диакритические знаки fxp). Я читаю эту аську, используя другую кодировку (CP-1251, если я помню).
Как я могу декодировать строку с текстом, чтобы исправить кодировку?
Я пытался использовать класс UTF8Encoding, но безуспешно.
Использование ICQ-резкой библиотеки.
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);
}
Если контакт использует тот же клиент, то все в порядке, но если нет, то входящие и исходящие сообщения с диакритическими знаками просто не читаются.
Я определил (используя это -> /questions/24968583/opredelit-kodirovku-stroki-v-c/24968604#24968604), что это в кодировке BigEndianUnicode. Но если строка не содержит диакритические знаки, она не читается (китайские буквы). Но если я использую кодировку UTF8 для текста без диакритических знаков, это нормально. Но я не знаю, как это сделать, это будет кодироваться всегда.
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);