Как использовать компонент из старого пакета indy9

Я обновил Indy9 до Indy10 в Delphi7. Мне потребовалось некоторое время, чтобы изменить все части с TCP-серверами и клиентами, но, похоже, теперь все работает хорошо.

Теперь я заметил, что одна часть все еще не работает, и это компонент idHTTPserver.

Веб-страница нашего приложения использует библиотеку mootools. С Indy9 idHTTPserver он работает отлично, однако Indy10 делает что-то, из-за чего браузеры не могут отображать страницу.

Помимо некоторых других ошибок, есть такая бессмысленная ошибка, как (вывод консоли Firefox Error):

Timestamp: 2013.08.07 13:13:56
Error: SyntaxError: missing ] after element list
Source File: http://192.168.100.2:8780/lib/ui/core/mootools-1.2.4-more-yc.js
Line: 103, Column: 60
Source Code:
unction(){var b=["C?","C ","C","C?","C,","C¢","Cƒ","C£","C"","C¤","C.","C?","Ä,","ă","Ä"","Ä.","Ä?","Ä?","ÄŒ","Ĩ","C?
-------------------------------------------------------------^

Фактический исходный код внутри этого .js:

long long text ....... function(){var b=["C?","C ","C","C?","C,","C¢","Cƒ","C£","C"","C¤","C.","C?","Ä,","ă","Ä"","Ä.","Ä?","Ä?","ÄŒ","Ĩ","C?","C§","Ä?","ĸ","Ä","Ä'","Cˆ","CØ","C?","C©","CŠ","CR","C<","C«","Äš","Ä>","Ę","ÄT","Ä?","ÄŸ","CŒ","C¬","C¨","C­","C?","C®","C¸","CÆ","Ĺ","Är","Ľ","ľ","Å","Å,","C'","C±","Å?","ň","Ń","Å"","C'","C²","C"","C³","C"","C´","C.","Cµ","C-","C¶","C˜","Cø","Å'","Ř","ÅT","Å"","Å.","Å ","Å?","Å?","ÅŸ","Åš","Å>","Ť","Å?","Ť","Å?","Å¢","Å£","CT","C¹","Cš","Cr","C>","C»","Cœ","C¼","Å®","ÅÆ","Åø","Cæ","C½","C¯","Ž","ž","Ź","År","Å»","ż","C?","C¾","C","C°","CŸ","Å'","Å"","C?","C¦","Aµ"]; ................ long long text

Что здесь происходит?

Я глубоко вздохнул и подумал, эй, я мог бы просто использовать старую версию idHTTPserver, так как у меня все еще есть исходные файлы Indy9 в другой папке. Если никто не знает, как исправить HTTP-сервер indy10, может кто-нибудь сказать мне, как мне использовать старую версию? Просто компонент HTTP-сервера (который наверняка связан с десятками других старых инди-файлов).

Я попытался включить старые исходники, но это становилось беспорядком, потому что он использовал idHTTPserver.pas из старой версии, но idCustomHTTPserver.pas (это то, что происходит после того, как я следую использованию файла idHTTPserver.pas) из новой версии ...


person user1651105    schedule 07.08.2013    source источник
comment
Код, на который жалуется Firefox, неверен, но он соответствует тому, что вы говорите в файле. У вас неуместная кавычка. Возможно, вам нужно сбежать от него. Это не имеет ничего общего с Delphi или Indy. Ваш JavaScript не работает, и ваш браузер это заметил.   -  person Rob Kennedy    schedule 07.08.2013
comment
Вы уверены, что виноват вопросительный знак? Мне это кажется подозрительным: "C"". Именно на это указывает Firefox. Я бы подумал, что первый " завершает строковый литерал, и, поскольку после него нет , или ], массив искажен. Так что первый " нужно будет экранировать. То же самое с "Ä"" и "Å"".   -  person Remy Lebeau    schedule 07.08.2013


Ответы (2)


Чтобы использовать другую версию Indy в одном проекте, установите путь поиска проекта на Indy\Lib\Core, \Protocols и \System и создайте экземпляры всех компонентов в коде.

Это также имеет то преимущество, что вы можете избежать шагов удаления/установки для переключения между различными версиями Indy 10.

person mjn    schedule 07.08.2013
comment
Вопрос не в этом. :-) Он спросил, как использовать Indy9 IdHTTPServer только при использовании Indy10 версий всего остального. - person Ken White; 07.08.2013

Хотя это не прямой ответ на мой собственный вопрос в заголовке, это решило мою проблему.

Я проследил за функцией HTTPserver.WriteContent, которая привела к idHTTPServer.pas, затем сравнил файлы idHTTPServer.pas Indy9 и Indy10, части о кодировании в Indy10 привлекли мое внимание.

В строке 2039 я удалил второй аргумент функции записи.

FConnection.IOHandler.Write(ContentText, CharsetToEncoding(CharSet));
заменено на FConnection.IOHandler.Write(ContentText);

Это решило мою проблему. Теперь все работает нормально.

Основной проблемой здесь были, как заметили комментаторы, лишние символы ". Я был довольно глуп, потому что я щелкнул ссылку в консоли Firefox, и он открыл файл javascript, который был неправильной версии, и по какой-то причине я подумал, что это то, что он должен был быть.Только чуть позже я решил проверить реальный файл на своем ПК, и оказалось, что "C"" это даже не C, фактический текст такой

var b=["À","à","Á","á","Â","â","Ã","ã","Ä","ä","Å","å","Ă","ă","Ą","ą","Ć","ć","Č","č","Ç","ç","Ď","ď","Đ","đ","È","è","É","é","Ê","ê","Ë","ë","Ě","ě","Ę","ę","Ğ","ğ","Ì","ì","Í","í","Î","î","Ï","ï","Ĺ","ĺ","Ľ","ľ","Ł","ł","Ñ","ñ","Ň","ň","Ń","ń","Ò","ò","Ó","ó","Ô","ô","Õ","õ","Ö","ö","Ø","ø","ő","Ř","ř","Ŕ","ŕ","Š","š","Ş","ş","Ś","ś","Ť","ť","Ť","ť","Ţ","ţ","Ù","ù","Ú","ú","Û","û","Ü","ü","Ů","ů","Ÿ","ÿ","ý","Ý","Ž","ž","Ź","ź","Ż","ż","Þ","þ","Ð","ð","ß","Œ","œ","Æ","æ","µ"];

Итак, я был прав. Когда весь текст проходит через CharsetToEncoding, он переводит все эти одиночные символы в 2 символа.

Я не приму свой собственный ответ, так как он на самом деле не отвечает на вопрос заголовка, и я хотел бы знать, возможно ли использовать один компонент более старой версии, а остальные новее.

person user1651105    schedule 08.08.2013