IdnMapping 클래스

정의

인터넷 도메인 이름에 비 ASCII 문자 사용을 지원합니다. 이 클래스는 상속할 수 없습니다.

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

예제

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

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까지 US-ASCII(또는 기본 라틴 문자) 문자 범위의 지정된 문자로 구성됩니다. US-ASCII 문자 집합을 사용하지 않는 문화권에서 인터넷 사용을 용이하게 하기 위해 IDNA(Internationalizing Domain Names in Applications) 표준은 2003년에 채택되어 US-ASCII 문자 범위 밖에 유니코드 문자를 포함할 수 있도록 지원했습니다. 그러나 이름 서버 및 도메인 이름 확인은 US-ASCII 문자 범위 내의 문자에 계속 의존합니다.

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

Important

.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 원래 레이블 구분 기호 문자를 복원하지 않습니다.

생성자

Name Description
IdnMapping()

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

속성

Name Description
AllowUnassigned

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

UseStd3AsciiRules

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

메서드

Name Description
Equals(Object)

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

GetAscii(String, Int32, Int32)

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

GetAscii(String, Int32)

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

GetAscii(String)

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

GetHashCode()

IdnMapping 개체에 대한 해시 코드를 반환합니다.

GetType()

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

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

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

GetUnicode(String, Int32)

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

GetUnicode(String)

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

MemberwiseClone()

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

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

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

(다음에서 상속됨 Object)
TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32)

인터넷 도메인 이름에 비 ASCII 문자 사용을 지원합니다. 이 클래스는 상속할 수 없습니다.

TryGetUnicode(ReadOnlySpan<Char>, Span<Char>, Int32)

인터넷 도메인 이름에 비 ASCII 문자 사용을 지원합니다. 이 클래스는 상속할 수 없습니다.

적용 대상

스레드 보안

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

추가 정보