gpt4 book ai didi

c - 使用 InternetSetOption 函数设置具有 unicode 字符的代理 URL

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:21 27 4
gpt4 key购买 nike

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

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

我必须设置这个路径

IE->InternetOptions->Connections->LAN settings->Use automatic configuration script

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 版本。之所以需要这些不同的版本,是因为 Windows 95/98/ME 不支持 Unicode,只支持 8 位编码。由于您可以安全地忽略那些古老版本的 Windows,因此您可以使用 Win32 API 的 Unicode 版本。

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

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

我不确定此更改能否解决您的实际问题,因为问题不明确且缺乏详细信息。然而,以上建议是您需要做的才能在您的程序中正确支持国际字符。

关于c - 使用 InternetSetOption 函数设置具有 unicode 字符的代理 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410759/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com