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, стандарт internationalizing доменных имен в приложениях (IDNA) был принят в 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) в каждую метку. Метод 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, 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 свойства экземпляра также не задаются одновременно.

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