2013-07-01 8 views
1

Я долгое время сталкивался с проблемой.Настройка URL-адреса прокси-сервера с помощью символов Unicode с использованием функции InternetSetOption

Имя учетной записи пользователя Windows содержит некоторые из этих символов (..., Ü, Ä). Редактировать: Даже китайские персонажи. Таким образом, в основном символы, которые не рассматриваются в ASCII. У меня есть файл proxy pac, хранящийся в% appdata% \ MyAppFolder. - Этот путь при расширении содержит некоторые специальные символы, подобные упомянутым выше.

Я должен установить этот путь в

IE-> InternetOptions-> Подключения-> LAN настройки-> Использование автоматической настройки сценария

This translates to: 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\AutoConfigURL in the registry. 

фрагмент кода:

wchar_t wzsPath[MAX_PATH]; 
wchar_t wszProxyUrl[INTERNET_MAX_URL_LENGTH]; 
SHGetFolderPath (NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, wszPath); 

// Construct Pac file path. – %appdata%\MyAppFolder\redirect.pac 
StringCbPrintf (wszProxyUrl, sizeof(wszProxyUrl), 
     L"file://%s\\MyAppFolder\\redirect.pac", wszPath); 

INTERNET_PER_CONN_OPTION_LIST *optionList = 0; 
optionList->pOptions[INDEX].Value.pszValue = wszPath; 

InternetSetOption (NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, 
     optionList, sizeof(INTERNET_PER_CONN_OPTION_LIST)); 

Проблема в том, что путь, установленный InternetSetOption, неверен в локации реестра ион.

Например, строка «Test ...» установлена ​​в «TestÃ-» в реестре. IE9 задает текст прямо в браузере, но без какой-либо помощи. IE10 устанавливает значение нежелательной почты, как в реестре. Это приводит к нарушению доступа к сети.

+0

Символы ASCII имеют значения в диапазоне от 0 до 127 включительно. Очевидно, 153, 154 и 142 не являются частью ASCII. Поскольку это ваш вопрос, это не вопрос, потому что факты все не так. Более того, вы не предоставили нам никакого кода, чтобы мы могли реально определить, откуда берутся эти ценности. –

+0

Спасибо, Дэвид. Я был в шоке от [link] (http://www.asciitable.com/) расширенного раздела ASCII. Хотя печать на консоли ожидает этого (расширенное значение ascii), печать символов в MessageBox/Debug String считывает значение кодовой страницы html. – DebugBreak

+0

В ближайшее время я добавлю несколько значимых фрагментов кода. – DebugBreak

ответ

0

InternetSetOption - довольно обычная функция Win32. Он доступен в двух вариантах: версии ANSI и Unicode. Потребность в этих разных версиях связана с тем, что Windows 95/98/ME не поддерживала Unicode и поддерживала только 8-битные кодировки. Поскольку вы можете спокойно игнорировать эти древние версии Windows, вы можете использовать Unicode-версии Win32 API.

В вашем случае это означает, что вы убедитесь, что вы скомпилируете свое приложение для юникода. Это гарантирует, что InternetSetOption сопоставляется с InternetSetOptionW, версией Unicode, которая использует кодировку UTF-16.

В качестве базового символьного символа персональные массивы должны использовать тип символа Windows 16 бит wchar_t. Вы не должны использовать char, потому что это 8 бит.

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

+0

Спасибо за ответ. Я был введен в заблуждение этими расширенными значениями ascii. Проблема на самом деле связана со всеми символами charcaters со значением> 127. Вот фрагмент кода. ' SHGetFolderPath (NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, wszPath); INTERNET_PER_CONN_OPTION_LIST * optionList = 0; опцияList-> pOptions [INDEX] .Value.pszValue = wszPath; InternetSetOption (NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, optionList, sizeof (INTERNET_PER_CONN_OPTION_LIST)); ' – DebugBreak

+0

Я думаю, что я ответил на ваш первоначальный вопрос так же хорошо, насколько это возможно. Что еще тебе нужно? –

+0

Да. Ваш ответ помог очистить мои неправильные вести. Редактировал мой вопрос совсем немного. Надеюсь, это яснее. – DebugBreak