WinINet での IDN サポート
Windows Server 2008 および Windows Vista 以降では、Unicode URL のホスト部分が国際化ドメイン名 (IDN) に変換されます。 Unicode URL エンコードの個別の部分は、アプリケーションによって設定された構成によって変更することもできます。 WinINet API の ANSI バージョンは、アプリケーションによって入力されたワイヤ経由で URL を送信し続けますが、WinINet Unicode バージョンの API は、URL エンコードの IDN 標準 (RFC3490) に準拠するようになりました。
既定では、URL が Unicode パラメーターとして入力されると、プロキシ接続と直接接続の両方のホスト部分が IDN 形式に変換されます。 アプリケーションには、 INTERNET_OPTION_IDN オプションを設定して IDN ホストの書式設定を無効にするオプションがあります。 IDN ホスト変換は、INTERNET_OPTION_IDNを持つINTERNET_FLAG_IDN_DIRECT または INTERNET_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 サービス (WinHTTP) を使用します。