Delphi XE2 Indy IRC Юникод

Возможно ли получить там поддержку юникода? Прямо сейчас на IdIRC1PrivateMessage у меня есть '?' Спасибо за помощь.

procedure TForm1.IdIRC1PrivateMessage(ASender : TIdContext;
const ANicknameFrom, AHost, ANicknameTo, AMessage : unicodestring);

begin
  Memo1.Lines.Add(TimeToStr(Time) + ': ' + ANicknameFrom + ':  ' + AMessage);
end;

Инди-версия: 10.5.8.0. Когда я отправлю сообщение в mIRC, например, «żźć», я получу «???» в дельфах


person user2512579    schedule 22.06.2013    source источник
comment
IRC — устаревший протокол, который не знает ни языков, ни кодировок, ни юникода. en.wikipedia.org/wiki/IRC#Character_encoding Можете ли вы использовать XMPP или какой-либо другой вместо этого современный протокол?   -  person Arioch 'The    schedule 23.06.2013
comment
Прямо сейчас на IdIRC1PrivateMessage у меня есть '?' что ты имеешь в виду ? О, и кстати, что вы подразумеваете под юникодом? существует полдюжины форматов Unicode. Указание версии Indy тоже было бы неплохо. Иногда это становится важной информацией. И, возможно, получить новую версию Indy: indyproject.org/Sockets/Download/Files /Indy10.EN.aspx   -  person Arioch 'The    schedule 23.06.2013
comment
Инди-версия: 10.5.8.0. Когда я отправлю сообщение в mIRC, например, «żźć», я получу ??? в дельфах   -  person user2512579    schedule 23.06.2013
comment
Судя по indyproject.org/docsite/html/!!MEMBEROVERVIEW_TIdIRC.html У вас мало недостатков с Indy, если только они не изменили его после выпуска XE2. Что ж, им придется изменить это, поскольку использование строк для двоичных данных противоречит рекомендациям XE4. На данный момент вы можете попробовать использовать Delphi до Unicode или CodeTyphon/Lazarus на основе UTF-8 или исправить исходные коды Indy, чтобы добавить поддержку кодировки. Возможно, создание IRC в отдельном потоке с кодовой страницей, отличной от стандартной, помогло бы, но, скорее всего, Delphi RTL запутал бы наличие нескольких кодовых страниц внутри отдельных приложений.   -  person Arioch 'The    schedule 23.06.2013
comment
mIRC настроен на использование UTF8? настройте его на использование той же кодировки, что и в вашей Windows... Последний абзац в synapse.ararat.cz/doku.php/public:howto:d2009 посвящен тем же проблемам, которые сейчас есть у Инди. Я предполагаю, что вы должны исправить весь код на Indy IRC, чтобы исправить строки преобразования UTF-16 XE2 в 8-байтовые строки IRC и обратно. Или поменять библиотеку. У проекта VisualIRC есть исходники, но они были выпущены для Delphi до unicode и могут вам мало помочь. Или нет. В любом случае, IRC устарел, и вы можете выбрать лучшие варианты чата. Как ремейки IntranetChat или XMPP   -  person Arioch 'The    schedule 23.06.2013
comment
попробуйте Indy dev-snapshot, возможно они добавили поддержку кодировок в IRC, а может и нет - скачайте и посмотрите, изменился ли их код IRC. Но не возлагайте большие надежды   -  person Arioch 'The    schedule 23.06.2013
comment
Спасибо за все ответы. Я хочу это для twitch.tv, и они используют IRC для чата. mIRC может правильно отображать все установленные символы   -  person user2512579    schedule 23.06.2013
comment
Вы установили шрифт TMemo на тот, который может отображать символы Unicode? Из параметров события видно, что Unicode действительно поддерживается, так что это может быть просто проблема с отображением элемента управления memo.   -  person Ken White    schedule 23.06.2013
comment
Кен Уайт, я пробовал, также отображал его в системном окне сообщений.   -  person user2512579    schedule 23.06.2013
comment
я не вижу, что их чат основан на IRC. но попробуйте настроить IRC для использования кодировки, отличной от Unicode. И, возможно, у них разные TCP-порты для подключения с разными кодировками.   -  person Arioch 'The    schedule 23.06.2013


Ответы (1)


Сам протокол IRC не предусматривает никаких условий для Unicode. mIRC реализует Unicode с использованием UTF-8, где это применимо (см. эту статью) .

TIdIRC изначально не поддерживает Unicode. Однако вы можете вручную указать TIdIRC кодировать/декодировать данные с использованием UTF-8, установив для свойства TIdIOHandler.DefStringEncoding значение IndyUTF8Encoding после подключения или установив для глобальной переменной IdGlobal.GIdDefaultTextEncoding значение encUTF8 (по умолчанию установлено значение encASCII). Я не гарантирую, что он будет работать правильно во всех ситуациях (особенно во время операций CTC/DCC).

person Remy Lebeau    schedule 24.06.2013