다음을 통해 공유


WinINet의 IDN 지원

Windows Server 2008 및 Windows Vista부터 유니코드 URL의 호스트 부분이 IDN(Internationalized Domain Name)으로 변환됩니다. 애플리케이션에서 설정한 구성을 통해 유니코드 URL 인코딩의 개별 부분을 수정할 수도 있습니다. WinINet API의 ANSI 버전은 애플리케이션에서 입력한 대로 유선으로 URL을 계속 전송합니다. 그러나 이제 API의 WinINet 유니코드 버전은 URL 인코딩에 대한 IDN 표준(RFC3490)을 준수합니다.

기본적으로 URL을 유니코드 매개 변수로 입력하면 프록시 및 직접 연결 모두에 대한 호스트 부분이 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은 서버 구현을 지원하지 않습니다. 또한 서비스에서 사용하지 않아야 합니다. 서버 구현 또는 서비스의 경우 WinHTTP(Microsoft Windows HTTP 서비스)를 사용합니다.