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", разделенных точками. Стандартные доменные имена состоят из назначенных символов в диапазоне символов US-ASCII (или простой латиницы), от U+0021 до U+007E. Чтобы упростить использование Интернета в языках и региональных параметрах, не использующих набор символов US-ASCII, в 2003 году был принят стандарт Internationalizing Domain Names in Applications (IDNA) для поддержки включения символов Юникода за пределы диапазона символов US-ASCII. Однако серверы имен и разрешение доменных имен по-прежнему зависят от символов в диапазоне символов US-ASCII.

Механизм IDNA использует Punycode для сопоставления международного доменного имени, содержащего символы Юникода за пределами диапазона символов US-ASCII, с диапазоном символов US-ASCII, поддерживаемым системой доменных имен. Механизм IDNA используется для преобразования только доменных имен, а не данных, передаваемых через Интернет.

Важно!

В платформа .NET Framework 4.5 IdnMapping класс поддерживает различные версии стандарта IDNA в зависимости от используемой операционной системы:

Различия в том, как эти стандарты обрабатывают определенные наборы символов, см. в разделе Технический стандарт Юникода No 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 являются потокобезопасными и могут использоваться одновременно из нескольких потоков, если IdnMapping свойства экземпляра также не заданы одновременно.

См. также раздел