Partilhar via


IdnMapping Classe

Definição

Suporta o uso de caracteres não ASCII para nomes de domínio da Internet. Essa classe não pode ser herdada.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Herança
IdnMapping

Exemplos

O exemplo a seguir usa o GetAscii(String, Int32, Int32) método para converter uma matriz de nomes de domínio internacionalizados em Punycode. Em GetUnicode seguida, o método converte o nome de domínio punycode de volta para o nome de domínio original, mas substitui os separadores de rótulo originais pelo separador de rótulo padrão.

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

Comentários

Um nome de domínio da Internet consiste em uma ou mais partes, chamadas rótulos de nome de domínio, separadas por separadores de rótulo. Por exemplo, o nome de domínio "www.proseware.com" consiste nos rótulos , "www", "proseware" e "com", separados por períodos. Os nomes de domínio padrão consistem em caracteres designados no intervalo de caracteres US-ASCII (ou Latino Básico), de U+0021 a U+007E. Para facilitar o uso da Internet em culturas que não usam o conjunto de caracteres US-ASCII, o padrão IDNA (Nomes de Domínio Internacionalizados em Aplicativos) foi adotado em 2003 para dar suporte à inclusão de caracteres Unicode fora do intervalo de caracteres US-ASCII. No entanto, os servidores de nomes e a resolução de nomes de domínio continuam a depender de caracteres dentro do intervalo de caracteres US-ASCII.

O mecanismo IDNA usa Punycode para mapear um nome de domínio internacionalizado que contém caracteres Unicode fora do intervalo de caracteres US-ASCII para o intervalo de caracteres US-ASCII compatível com o sistema de nomes de domínio. O mecanismo IDNA é usado para converter apenas nomes de domínio, não dados transmitidos pela Internet.

Importante

No .NET Framework 4.5, a classe dá suporte a IdnMapping diferentes versões do padrão IDNA, dependendo do sistema operacional em uso:

Consulte Unicode Technical Standard #46: Processamento de Compatibilidade IDNA para obter as diferenças na maneira como esses padrões lidam com conjuntos específicos de caracteres.

O IdnMapping.GetAscii método normaliza um nome de domínio, converte o nome normalizado em uma representação que consiste em caracteres Unicode exibicionáveis no intervalo de pontos de código US-ASCII (U+0020 em U+007E) e prepara um prefixo ACE (codificação compatível com ASCII) ("xn--") para cada rótulo. O IdnMapping.GetUnicode método restaura os rótulos de nome de domínio convertidos pelo GetAscii método .

Se a cadeia de caracteres a ser convertida incluir os caracteres separadores de rótulo IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) e HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), o método os GetAscii converterá no separador de rótulo FULL STOP (ponto, U+002E). O GetUnicode método, no entanto, não restaura o caractere separador de rótulo original.

Construtores

IdnMapping()

Inicializa uma nova instância da classe IdnMapping.

Propriedades

AllowUnassigned

Obtém ou define um valor que indica se os pontos de código Unicode não atribuídos são usados em operações realizadas por membros do objeto IdnMapping atual.

UseStd3AsciiRules

Obtém ou define um valor que indica se convenções de nomenclatura padrão ou amenas são usadas em operações realizadas por membros do objeto IdnMapping atual.

Métodos

Equals(Object)

Indica se um objeto especificado e o objeto IdnMapping atual são iguais.

GetAscii(String)

Codifica uma cadeia de caracteres de rótulos de nome de domínio que consistem em caracteres Unicode para uma cadeia de caracteres Unicode exibíveis no intervalo de caracteres US-ASCII. A cadeia de caracteres é formatada de acordo com o padrão IDNA.

GetAscii(String, Int32)

Codifica uma subcadeia de caracteres de rótulos de nome de domínio que incluem caracteres Unicode fora do intervalo de caracteres US-ASCII. A subcadeia de caracteres é convertida em uma cadeia de caracteres Unicode exibíveis no intervalo de caracteres US-ASCII e é formatada segundo o padrão IDNA.

GetAscii(String, Int32, Int32)

Codifica o número especificado de caracteres em uma subcadeia de caracteres de rótulos de nome de domínio que incluem caracteres Unicode fora do intervalo de caracteres US-ASCII. A subcadeia de caracteres é convertida em uma cadeia de caracteres Unicode exibíveis no intervalo de caracteres US-ASCII e é formatada segundo o padrão IDNA.

GetHashCode()

Retorna um código hash para esse objeto IdnMapping.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
GetUnicode(String)

Decodifica uma cadeia de caracteres de um ou mais rótulos de nome de domínio, codificados de acordo com o padrão IDNA, em uma cadeia de caracteres Unicode.

GetUnicode(String, Int32)

Decodifica uma subcadeia de caracteres de um ou mais rótulos de nome de domínio, codificados de acordo com o padrão IDNA, em uma cadeia de caracteres Unicode.

GetUnicode(String, Int32, Int32)

Decodifica uma subcadeia de caracteres de um tamanho especificado que contém um ou mais rótulos de nome de domínio, codificados de acordo com o padrão IDNA, em uma cadeia de caracteres Unicode.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Acesso thread-safe

Todos os métodos públicos de IdnMapping são thread-safe e podem ser usados simultaneamente de vários threads, desde que as IdnMapping propriedades da instância também não sejam definidas simultaneamente.

Confira também