次の方法で共有


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) を使用します。