![]() |
|
|
#1
|
|||
|
|||
![]() Доброго времени суток, господа (и дамы) программисты! Впервые решил обратиться за помощью на форум (обычно хватает недолгого поиска в гугле для решения проблемы), так что, если я что-то делаю не так, некорректно ставлю вопрос или еще чего, тапками не кидайтесь
![]() Такс... пока писал все это многабукаф уже сам допер, насколько просто решается проблема. Но все-таки, меня интересует, что является ее причиной. Может быть кто-то знает? Итак, сабж: пишу я программку-почтовик, с использованием сокетов. Все идет отлично, разобрался с сокетами, разобрался с протоколом ESMTP, программа посылает запросы, сервер отвечает как положено, но есть одна проблема, перед которой я оказался бессилен. Авторизация у нас на почтовике проходит методом plain, т.е. клиент должен отправить серверу строку с логином и паролем, закодированными в Base64. Отлично, нашел в интернете кучу функций кодирования и декодирования, да и в делфи оказалось несколько встроенных вариаций. Но вот беда, строка, закодированная в моей программе ну просто никак не хочет совпадать со строкой, закодированной на сервере! Сперва меня посетила мысль, что моя версия Delphi (2010) по умолчанию использует юникод для переменных типа string и именно из-за разницы в кодировках получаются разные строчки в Base64. Мысль сия терзала меня долгое время, но потом я получше рассмотрел код и отказался от нее в силу того, что еще на этапе компиляции поменял все string и char на ansistring и ansichar по причине несовпадения типов (двухбайтовый Char ну никак не лезет в Byte ![]() Итак, по версии моей программы, строка " marketing" (пробел впереди) выглядит так: IG1hcmtldGluZw== Почтовый сервер же считает, что должно быть так: AG1hcmtldGluZw== Пока писал тему, заметил, что коды то по сути и не отличаются, за исключением первой буквы *facepalm*. Проблему уже решил, тупой заменой символов I и y (с ним тоже непонятки были) на A и w соответственно. Но может кто-то знает, почему наш почтовик кодирует пробел иначе, чем моя программа? Там FreeBSD, у меня WinXP. И вообще, какой из двух вариантов верный? Последний раз редактировалось Olgir, 25.08.2011 в 11:28. |