Всем привет! Помогите новичку.
Прога задумана работать как POP3-клиент. Но пролбема в передачи пароля пользователя. При использовании пароля с Английской розкладкой всё работает нормально, но как только используеться Русская разкладка(шрифт), то пароль разпознает как не правильный. Соединение с сервером по POP3 проходит нормально. Вот пример кода:
Здравствуйте, KARDAN, Вы писали:
KAR>Всем привет! Помогите новичку. KAR>Прога задумана работать как POP3-клиент. Но пролбема в передачи пароля пользователя. При использовании пароля с Английской розкладкой всё работает нормально, но как только используеться Русская разкладка(шрифт), то пароль разпознает как не правильный. Соединение с сервером по POP3 проходит нормально. Вот пример кода: KAR>
Keywords and arguments consist of printable ASCII characters.
Получается, что по стандарту — никак. Только семибитная кодировка. Если надо поддержку с конкретным POP3 сервером, то смотри в какой кодировке он пароли сохраняет (или принимает, при заведении пользователя).
Здравствуйте, KARDAN, Вы писали:
KAR>то есть, если я правильно понял, надо дописать вид кодировки: KAR>
KAR>szBuff = sprintf_s(chSend, 1024,"PASS =?Windows-1251?%s?=\r\n", pass); // примерно так?
KAR>
KAR> Или что-то в этом роде?
Ни в коем случае! Та приписка не имеет отношения к протоколу POP3, это порождение времен MIME.
Еще раз — общего решения нет. Для конкретного POP3 сервера надо смотреть, что он использет.
Здравствуйте, KARDAN, Вы писали:
KAR>А как можно найти это? Допустим почтовик Kerio Mail Server . KAR>Может подскажешь приблизительно, может есть примеры?
По хорошему надо копаться в доках этого Kerio... Но ты можешь попробовать такое решение (что-то мне подсказывает, что вероятность успеха велика) — срезай восьмой бит на клиенте (зануляй его).
DOO>срезай восьмой бит на клиенте (зануляй его).
Чесно я в програмировании, по 10-ти бальной системе, наверное 1 с минусом. Я понимаю, что символ 'П' это 1байт = 8 битам, но на этом мои познания закнсиваються.
Если не сложно пример можешь привести.
Здравствуйте, KARDAN, Вы писали:
DOO>>срезай восьмой бит на клиенте (зануляй его). KAR>Чесно я в програмировании, по 10-ти бальной системе, наверное 1 с минусом. Я понимаю, что символ 'П' это 1байт = 8 битам, но на этом мои познания закнсиваються. KAR>Если не сложно пример можешь привести.
for (i = 0;i < l;i++)
{
str[i] &= 0x8f; //первый бит и занулится... и "П" (емли оно в cp1251) превратится в "O".
}
Здравствуйте, KARDAN, Вы писали:
KAR>и если не сложно, 0x7f — разьясните хочу понять, что именно значит?
Нам нужно старший бит байта сделать нулевым. То есть, например,
из бинарного 11001111 (16ричное 0xCF) сделать 01001111 (0x4F)
Для этого применяем побитове умножение ( & ) с байтом 01111111. Это и есть — 0x7F
Попытка с занулением первого(старшего)бита не решила проблему. Попробывал использовать MultiByteToWideChar и WideCharToMultiByte, OemToChar и CharToOem, подставляя значения к этим фунциям, но результат, отрицательный.
Может у когото есть ещё варианты?
Я не волшебник, но хочу научится!!!
Re[11]: POP3 Клиент - проблемы с паролем в UNICODE
Здравствуйте, KARDAN, Вы писали:
KAR>Попытка с занулением первого(старшего)бита не решила проблему. Попробывал использовать MultiByteToWideChar и WideCharToMultiByte, OemToChar и CharToOem, подставляя значения к этим фунциям, но результат, отрицательный. KAR>Может у когото есть ещё варианты?
Если какой-нибудь Outlook Express или еще какой почтовый клиент способен найти общий язык с этим сервером, перехвати его сетевую сессию и посмотри, что отсылает он...