我在一个问题上困了好一阵子。
Windows用户帐户名包含其中一些字符(Ü,Ü,Ä)。编辑:甚至是汉字。所以基本上是ASCII中没有包含的字符。
我有一个代理pac文件存储在%appdata%\MyAppFolder中。-展开时此路径包含一些特殊字符,如上面提到的字符。
我得让这条路进去
IE->Internet选项->连接->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在注册表中设置垃圾值。
这会导致网络访问中断。

最佳答案

InternetSetOption是一个相当普通的Win32函数。它有两种风格,ANSI和Unicode版本。对这些不同版本的需求源于Windows95/98/ME不支持Unicode,只支持8位编码。因为您可以安全地忽略那些早期版本的Windows,所以可以使用Unicode版本的Win32 API。
在您的情况下,这意味着您要确保将应用程序编译为目标Unicode。这将确保InternetSetOption映射到使用UTF-16编码的Unicode版本InternetSetOptionW
字符数组应该使用Windows 16位字符类型wchar_t作为基本字符类型。您不能使用char,因为它是8位的。
我不确定这个改变是否能解决你的实际问题,因为这个问题不清楚,也缺乏细节。然而,以上建议是您需要做的,以便能够在您的程序中适当地支持国际字符。

10-01 06:05
查看更多