IdnMapping Clase

Definición

Admite el uso de caracteres no ASCII para nombres de dominio de Internet. Esta clase no puede heredarse.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Herencia
IdnMapping

Ejemplos

En el ejemplo siguiente se usa el GetAscii(String, Int32, Int32) método para convertir una matriz de nombres de dominio internacionalizados en Punycode. A GetUnicode continuación, el método convierte el nombre de dominio punycode en el nombre de dominio original, pero reemplaza los separadores de etiquetas originales por el separador de etiquetas estándar.

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

Comentarios

Un nombre de dominio de Internet consta de una o varias partes, denominadas etiquetas de nombre de dominio, separadas por separadores de etiquetas. Por ejemplo, el nombre de dominio "www.proseware.com" consta de las etiquetas, "www", "proseware" y "com", separadas por puntos. Los nombres de dominio estándar constan de caracteres designados en el intervalo de caracteres US-ASCII (o Básico Latino), de U+0021 a U+007E. Para facilitar el uso de Internet en referencias culturales que no usan el juego de caracteres US-ASCII, el estándar Internationalizing Domain Names in Applications (IDNA) se adoptó en 2003 para admitir la inclusión de caracteres Unicode fuera del intervalo de caracteres US-ASCII. Sin embargo, los servidores de nombres y la resolución de nombres de dominio siguen confiando en caracteres dentro del intervalo de caracteres de US-ASCII.

El mecanismo IDNA usa Punycode para asignar un nombre de dominio internacionalizado que contiene caracteres Unicode fuera del intervalo de caracteres de US-ASCII al intervalo de caracteres de US-ASCII compatible con el sistema de nombres de dominio. El mecanismo IDNA se usa para convertir solo nombres de dominio, no datos transmitidos a través de Internet.

Importante

En .NET Framework 4.5, la IdnMapping clase admite diferentes versiones del estándar IDNA, en función del sistema operativo en uso:

Consulte Estándar técnico Unicode n.º 46: Procesamiento de compatibilidad de IDNA para conocer las diferencias en la forma en que estos estándares controlan determinados conjuntos de caracteres.

El IdnMapping.GetAscii método normaliza un nombre de dominio, convierte el nombre normalizado en una representación que consta de caracteres Unicode que se pueden mostrar en el intervalo de puntos de código US-ASCII (U+0020 a U+007E) y antepone un prefijo de codificación compatible con ASCII (ACE) a cada etiqueta. El IdnMapping.GetUnicode método restaura las etiquetas de nombre de dominio convertidas por el GetAscii método .

Si la cadena que se va a convertir incluye los caracteres separadores de etiquetas IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) y HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), el GetAscii método los convierte en el separador de etiquetas FULL STOP (period, U+002E). Sin embargo, el GetUnicode método no restaura el carácter separador de etiqueta original.

Constructores

Nombre Description
IdnMapping()

Inicializa una nueva instancia de la clase IdnMapping.

Propiedades

Nombre Description
AllowUnassigned

Obtiene o establece un valor que indica si los puntos de código Unicode sin asignar se usan en las operaciones realizadas por miembros del objeto actual IdnMapping .

UseStd3AsciiRules

Obtiene o establece un valor que indica si las convenciones de nomenclatura estándar o relajada se usan en las operaciones realizadas por miembros del objeto actual IdnMapping .

Métodos

Nombre Description
Equals(Object)

Indica si un objeto especificado y el objeto actual IdnMapping son iguales.

GetAscii(String, Int32, Int32)

Codifica el número especificado de caracteres en una subcadena de etiquetas de nombre de dominio que incluyen caracteres Unicode fuera del intervalo de caracteres de US-ASCII. La subcadena se convierte en una cadena de caracteres Unicode que se pueden mostrar en el intervalo de caracteres US-ASCII y tiene el formato según el estándar IDNA.

GetAscii(String, Int32)

Codifica una subcadena de etiquetas de nombre de dominio que incluyen caracteres Unicode fuera del intervalo de caracteres de US-ASCII. La subcadena se convierte en una cadena de caracteres Unicode que se pueden mostrar en el intervalo de caracteres US-ASCII y tiene el formato según el estándar IDNA.

GetAscii(String)

Codifica una cadena de etiquetas de nombre de dominio que constan de caracteres Unicode en una cadena de caracteres Unicode que se pueden mostrar en el intervalo de caracteres de US-ASCII. La cadena tiene el formato según el estándar IDNA.

GetHashCode()

Devuelve un código hash para este IdnMapping objeto.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetUnicode(String, Int32, Int32)

Descodifica una subcadena de una longitud especificada que contiene una o varias etiquetas de nombre de dominio, codificadas según el estándar IDNA, en una cadena de caracteres Unicode.

GetUnicode(String, Int32)

Descodifica una subcadena de una o varias etiquetas de nombre de dominio, codificadas según el estándar IDNA, en una cadena de caracteres Unicode.

GetUnicode(String)

Descodifica una cadena de una o varias etiquetas de nombre de dominio, codificadas según el estándar IDNA, en una cadena de caracteres Unicode.

MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32)

Admite el uso de caracteres no ASCII para nombres de dominio de Internet. Esta clase no puede heredarse.

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

Admite el uso de caracteres no ASCII para nombres de dominio de Internet. Esta clase no puede heredarse.

Se aplica a

Seguridad para subprocesos

Todos los métodos públicos de IdnMapping son seguros para subprocesos y se pueden usar simultáneamente desde varios subprocesos, siempre y cuando las propiedades de la IdnMapping instancia no se establezcan simultáneamente.

Consulte también