1

我被困在一个问题中很长一段时间了。

Windows 用户帐户名包含其中一些字符(Ö、Ü、Ä)。编辑:即使是汉字。所以基本上是ASCII未涵盖的字符。我有一个代理 pac 文件存储在 %appdata%\MyAppFolder 中。- 扩展后的路径包含一些特殊字符,如上面提到的那些。

我必须设置这条路径

IE->InternetOptions->Connections->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 设置的路径在 Registry 位置不正确。

例如,字符串“TestÖ”在注册表中设置为“TestÖ”。IE9 在浏览器中设置文本,但没有任何帮助。IE10 在注册表中设置垃圾值。这导致网络访问中断。

4

1 回答 1

0

InternetSetOption是一个相当正常的Win32函数。它有两种风格,ANSI 和 Unicode 版本。之所以需要这些不同的版本,是因为 Windows 95/98/ME 不支持 Unicode,只支持 8 位编码。由于您可以放心地忽略那些古老版本的 Windows,因此您可以使用 Win32 API 的 Unicode 版本。

在您的情况下,这意味着您确保将应用程序编译为以 Unicode 为目标。这将确保InternetSetOption映射到InternetSetOptionW使用 UTF-16 编码的 Unicode 版本。

您的字符数组应使用 Windows 16 位字符类型wchar_t作为基本字符类型。您不能使用char,因为那是 8 位。

我不确定此更改是否会解决您的实际问题,因为该问题不清楚且缺乏详细信息。但是,上述建议是您需要执行的操作才能在您的程序中正确支持国际字符。

于 2013-07-02T08:36:01.887 回答