WinINet 中的 IDN 支持

从 Windows Server 2008 和 Windows Vista 开始,Unicode URL 的主机部分将转换为国际化域名 (IDN) 。 Unicode URL 编码的不同部分也可以通过应用程序设置的配置进行修改。 WinINet API 的 ANSI 版本继续按照应用程序输入的线路发送 URL,但 API 的 WinINet Unicode 版本现在符合 IDN 标准 (RFC3490) URL 编码。

默认情况下,当 URL 作为 Unicode 参数输入时,代理连接和直接连接的主机部分将转换为 IDN 格式。 应用程序可以通过设置 INTERNET_OPTION_IDN 选项来禁用 IDN 主机格式。 IDN 主机转换只能在直接连接或代理连接上启用,方法是使用带 INTERNET_OPTION_IDN 的 INTERNET_FLAG_IDN_DIRECTINTERNET_FLAG_IDN_PROXY标志。

下面的代码示例演示如何为代理和直接连接禁用 IDN 主机转换。

DWORD IDN = 0; 
InternetSetOption( hRequest, 
                   INTERNET_OPTION_IDN,
                   &IDN, 
                   sizeof(DWORD) ); 

如果禁用 IDN 主机格式设置,则应用程序可以选择使用 INTERNET_OPTION_CODEPAGE指定所需的代码页。

下面的代码示例演示如何指定日语代码页。

DWORD CP_SHIFT_JIS = 932;  // ANSI/OEM  Japanese, Shift-JIS
InternetSetOption( hRequest, 
                   INTERNET_OPTION_CODEPAGE,
                   &CP_SHIFT_JIS, 
                   Sizeof(DWORD) ); 

URL 的路径部分默认为 UTF8 编码,URL 的其余段(查询或片段)将转换为默认系统代码页 (CP_ACP) 。

以下示例演示如何为 URL 的路径部分指定朝鲜语代码页。

DWORD CP_KOREAN = 949;   // ANSI/OEM Korean 
InternetSetOption( hRequest, 
                   INTERNET_OPTION_CODEPAGE_PATH,
                   &CP_KOREAN, 
                   sizeof(DWORD) );

下表定义了支持 IDN 的选项。 有关详细信息,请参阅 选项标志 主题。

选项 说明
INTERNET_OPTION_CODEPAGE 此选项是在请求或连接句柄上设置的,用于为 URL 的主机部分指定代码页编码方案。 如果启用了 IDN,则忽略此选项。
INTERNET_OPTION_CODEPAGE_PATH 此选项是在请求上设置的,或者连接句柄为 URL 的路径部分启用指定的编码方案。 默认情况下,URL 的路径部分采用 UTF8 编码。
INTERNET_OPTION_CODEPAGE_EXTRA 在请求或连接句柄上设置此选项可为 URL 的额外部分启用指定的编码方案。 默认情况下,URL 的额外部分在默认系统代码页 (CP_ACP) 进行编码。
INTERNET_OPTION_IDN 此选项可用于请求或连接句柄,以启用或禁用 IDN 主机转换。 禁用 IDN 时,WinINet 使用默认的系统代码页对 URL 的主机或颁发机构部分进行编码。

 

注意

WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP Services (WinHTTP)