다음을 통해 공유


IdnMapping 클래스

정의

인터넷 도메인 이름에 ASCII 문자가 아닌 문자를 사용할 수 있도록 합니다. 이 클래스는 상속될 수 없습니다.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
상속
IdnMapping

예제

다음 예제에서는 메서드를 GetAscii(String, Int32, Int32) 사용하여 국제화된 도메인 이름 배열을 Punycode로 변환합니다. 그런 다음, 메서드는 GetUnicode Punycode 도메인 이름을 원래 도메인 이름으로 다시 변환하지만 원래 레이블 구분 기호를 표준 레이블 구분 기호로 바꿉니다.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] names = { "bücher.com", "мойдомен.рф", "παράδειγμα.δοκιμή",
                         "mycharity\u3002org",
                         "prose\u0000ware.com", "proseware..com", "a.org",
                         "my_company.com" };
      IdnMapping idn = new IdnMapping();

      foreach (var name in names) {
         try {
            string punyCode = idn.GetAscii(name);
            string name2 = idn.GetUnicode(punyCode);
            Console.WriteLine("{0} --> {1} --> {2}", name, punyCode, name2);
            Console.WriteLine("Original: {0}", ShowCodePoints(name));
            Console.WriteLine("Restored: {0}", ShowCodePoints(name2));
         }
         catch (ArgumentException) {
            Console.WriteLine("{0} is not a valid domain name.", name);
         }
         Console.WriteLine();
      }
   }

   private static string ShowCodePoints(string str1)
   {
      string output = "";
      foreach (var ch in str1)
         output += $"U+{(ushort)ch:X4} ";

      return output;
   }
}
// The example displays the following output:
//    bücher.com --> xn--bcher-kva.com --> bücher.com
//    Original: U+0062 U+00FC U+0063 U+0068 U+0065 U+0072 U+002E U+0063 U+006F U+006D
//    Restored: U+0062 U+00FC U+0063 U+0068 U+0065 U+0072 U+002E U+0063 U+006F U+006D
//
//    мойдомен.рф --> xn--d1acklchcc.xn--p1ai --> мойдомен.рф
//    Original: U+043C U+043E U+0439 U+0434 U+043E U+043C U+0435 U+043D U+002E U+0440 U+0444
//    Restored: U+043C U+043E U+0439 U+0434 U+043E U+043C U+0435 U+043D U+002E U+0440 U+0444
//
//    παράδειγμα.δοκιμή --> xn--hxajbheg2az3al.xn--jxalpdlp --> παράδειγμα.δοκιμή
//    Original: U+03C0 U+03B1 U+03C1 U+03AC U+03B4 U+03B5 U+03B9 U+03B3 U+03BC U+03B1 U+002E U+03B4 U+03BF U+03BA U+03B9 U+03BC U+03AE
//    Restored: U+03C0 U+03B1 U+03C1 U+03AC U+03B4 U+03B5 U+03B9 U+03B3 U+03BC U+03B1 U+002E U+03B4 U+03BF U+03BA U+03B9 U+03BC U+03AE
//
//    mycharity。org --> mycharity.org --> mycharity.org
//    Original: U+006D U+0079 U+0063 U+0068 U+0061 U+0072 U+0069 U+0074 U+0079 U+3002 U+006F U+0072 U+0067
//    Restored: U+006D U+0079 U+0063 U+0068 U+0061 U+0072 U+0069 U+0074 U+0079 U+002E U+006F U+0072 U+0067
//
//    prose ware.com is not a valid domain name.
//
//    proseware..com is not a valid domain name.
//
//    a.org --> a.org --> a.org
//    Original: U+0061 U+002E U+006F U+0072 U+0067
//    Restored: U+0061 U+002E U+006F U+0072 U+0067
//
//    my_company.com --> my_company.com --> my_company.com
//    Original: U+006D U+0079 U+005F U+0063 U+006F U+006D U+0070 U+0061 U+006E U+0079 U+002E U+0063 U+006F U+006D
//    Restored: U+006D U+0079 U+005F U+0063 U+006F U+006D U+0070 U+0061 U+006E U+0079 U+002E U+0063 U+006F U+006D
Imports System.Globalization

Module Example
   Public Sub Main()
      Dim names() As String = { "bücher.com", "мойдомен.рф", "παράδειγμα.δοκιμή",
                                "mycharity" + ChrW(&h3002) + "org",
                                "prose" + ChrW(0) + "ware.com", "proseware..com", "a.org", 
                                "my_company.com" }
      Dim idn As New IdnMapping()
      
      For Each name In names
         Try
            Dim punyCode As String = idn.GetAscii(name)
            Dim name2 As String = idn.GetUnicode(punyCode)
            Console.WriteLine("{0} --> {1} --> {2}", name, punyCode, name2) 
            Console.WriteLine("Original: {0}", ShowCodePoints(name))
            Console.WriteLine("Restored: {0}", ShowCodePoints(name2))
         Catch e As ArgumentException 
            Console.WriteLine("{0} is not a valid domain name.", name)
         End Try
         Console.WriteLine()
      Next   
   End Sub
   
   Private Function ShowCodePoints(str1 As String) As String
      Dim output As String = ""
      For Each ch In str1
         output += String.Format("U+{0} ", Convert.ToUInt16(ch).ToString("X4"))
      Next
      Return output
   End Function
End Module
' The example displays the following output:
'    bücher.com --> xn--bcher-kva.com --> bücher.com
'    Original: U+0062 U+00FC U+0063 U+0068 U+0065 U+0072 U+002E U+0063 U+006F U+006D
'    Restored: U+0062 U+00FC U+0063 U+0068 U+0065 U+0072 U+002E U+0063 U+006F U+006D
'    
'    мойдомен.рф --> xn--d1acklchcc.xn--p1ai --> мойдомен.рф
'    Original: U+043C U+043E U+0439 U+0434 U+043E U+043C U+0435 U+043D U+002E U+0440 U+0444
'    Restored: U+043C U+043E U+0439 U+0434 U+043E U+043C U+0435 U+043D U+002E U+0440 U+0444
'    
'    παράδειγμα.δοκιμή --> xn--hxajbheg2az3al.xn--jxalpdlp --> παράδειγμα.δοκιμή
'    Original: U+03C0 U+03B1 U+03C1 U+03AC U+03B4 U+03B5 U+03B9 U+03B3 U+03BC U+03B1 U+002E U+03B4 U+03BF U+03BA U+03B9 U+03BC U+03AE
'    Restored: U+03C0 U+03B1 U+03C1 U+03AC U+03B4 U+03B5 U+03B9 U+03B3 U+03BC U+03B1 U+002E U+03B4 U+03BF U+03BA U+03B9 U+03BC U+03AE
'    
'    mycharity。org --> mycharity.org --> mycharity.org
'    Original: U+006D U+0079 U+0063 U+0068 U+0061 U+0072 U+0069 U+0074 U+0079 U+3002 U+006F U+0072 U+0067
'    Restored: U+006D U+0079 U+0063 U+0068 U+0061 U+0072 U+0069 U+0074 U+0079 U+002E U+006F U+0072 U+0067
'    
'    prose ware.com is not a valid domain name.
'    
'    proseware..com is not a valid domain name.
'    
'    a.org --> a.org --> a.org
'    Original: U+0061 U+002E U+006F U+0072 U+0067
'    Restored: U+0061 U+002E U+006F U+0072 U+0067
'    
'    my_company.com --> my_company.com --> my_company.com
'    Original: U+006D U+0079 U+005F U+0063 U+006F U+006D U+0070 U+0061 U+006E U+0079 U+002E U+0063 U+006F U+006D
'    Restored: U+006D U+0079 U+005F U+0063 U+006F U+006D U+0070 U+0061 U+006E U+0079 U+002E U+0063 U+006F U+006D

설명

인터넷 도메인 이름은 레이블 구분 기호로 구분된 도메인 이름 레이블이라는 하나 이상의 부분으로 구성됩니다. 예를 들어 도메인 이름 "www.proseware.com"은 마침표로 구분된 레이블 "www", "proseware", "com"으로 구성됩니다. 표준 도메인 이름은 U+0021에서 U+007E까지 미국-ASCII(또는 기본 라틴 문자) 문자 범위에서 지정된 문자로 구성됩니다. 국제화 도메인 이름을 애플리케이션 (IDNA)에서 US ASCII 문자 집합을 사용 하지 않는 문화권에 대 한 인터넷 사용을 용이 하 게 표준 US-ASCII 문자 범위 외부의 유니코드 문자 포함을 지원 하기 위해 2003에 적용 됩니다. 그러나 이름 서버 및 도메인 이름 확인은 미국-ASCII 문자 범위 내의 문자에 계속 의존합니다.

IDNA 메커니즘은 Punycode를 사용하여 US-ASCII 문자 범위를 벗어난 유니코드 문자를 포함하는 국제화된 도메인 이름을 도메인 이름 시스템에서 지원하는 US-ASCII 문자 범위에 매핑합니다. IDNA 메커니즘은 인터넷을 통해 전송되는 데이터가 아닌 도메인 이름만 변환하는 데 사용됩니다.

중요

.NET Framework 4.5에서 클래스는 IdnMapping 사용 중인 운영 체제에 따라 다른 버전의 IDNA 표준을 지원합니다.

이러한 표준이 특정 문자 집합을 처리하는 방식의 차이는 유니코드 기술 표준 #46: IDNA 호환성 처리를 참조하세요.

메서드는 IdnMapping.GetAscii 도메인 이름을 정규화하고 정규화된 이름을 US-ASCII 코드 포인트 범위(U+0020에서 U+007E)의 표시 가능한 유니코드 문자로 구성된 표현으로 변환하고 ASCII 호환 인코딩(ACE) 접두사("xn--")를 각 레이블에 추가합니다. 메서드는 IdnMapping.GetUnicode 메서드로 변환된 도메인 이름 레이블을 GetAscii 복원합니다.

변환할 문자열에 레이블 구분 문자 IDEOGRAPHIC FULL STOP(U+3002), FULLWIDTH FULL STOP(U+FF0E) 및 HALFWIDTH IDEOGRAPHIC FULL STOP(U+FF61) GetAscii 이 포함된 경우 메서드는 레이블 구분 기호 FULL STOP(마침표, U+002E)으로 변환합니다. 그러나 메서드는 GetUnicode 원래 레이블 구분 기호 문자를 복원하지 않습니다.

생성자

IdnMapping()

IdnMapping 클래스의 새 인스턴스를 초기화합니다.

속성

AllowUnassigned

현재 IdnMapping 개체의 멤버에서 수행한 작업에 할당되지 않은 유니코드 코드 포인트가 사용되었는지 여부를 나타내는 값을 가져오거나 설정합니다.

UseStd3AsciiRules

현재 IdnMapping 개체의 멤버에서 수행한 작업에 표준 명명 규칙이 사용되었는지 또는 비표준 명명 규칙이 사용되었는지를 나타내는 값을 가져오거나 설정합니다.

메서드

Equals(Object)

지정된 개체가 현재 IdnMapping 개체와 같은지 여부를 나타냅니다.

GetAscii(String)

유니코드 문자로 구성된 도메인 이름 레이블 문자열을 US-ASCII 문자 범위에 있는 표시 가능한 유니코드 문자의 문자열로 인코딩합니다. 문자열은 IDNA 표준에 따라 형식이 지정됩니다.

GetAscii(String, Int32)

US-ASCII 문자 범위 외부의 유니코드 문자를 포함하는 도메인 이름 레이블의 부분 문자열을 인코딩합니다. 하위 문자열은 US-ASCII 문자 범위의 표시 가능한 유니코드 문자열로 변환되고 IDNA 표준에 따라 형식이 지정됩니다.

GetAscii(String, Int32, Int32)

US-ASCII 문자 범위를 벗어나는 유니코드 문자를 포함하는 도메인 이름 레이블의 부분 문자열에 지정된 수의 문자를 인코딩합니다. 하위 문자열은 US-ASCII 문자 범위의 표시 가능한 유니코드 문자열로 변환되고 IDNA 표준에 따라 형식이 지정됩니다.

GetHashCode()

IdnMapping 개체의 해시 코드를 반환합니다.

GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
GetUnicode(String)

IDNA 표준에 따라 인코딩된 하나 이상의 도메인 이름 레이블의 문자열을 유니코드 문자열로 디코딩합니다.

GetUnicode(String, Int32)

IDNA 표준에 따라 인코딩된 하나 이상의 도메인 이름 레이블의 하위 문자열을 유니코드 문자열로 디코딩합니다.

GetUnicode(String, Int32, Int32)

IDNA표준에 따라 인코딩된 하나 이상의 도메인 이름 레이블을 포함하는 지정된 길이의 부분 문자열을 유니코드 문자의 문자열로 디코딩합니다.

MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상

스레드 보안

IdnMapping 모든 공용 메서드는 스레드로부터 안전하며 instance 속성도 동시에 설정되지 않는 한 IdnMapping 여러 스레드에서 동시에 사용할 수 있습니다.

추가 정보