Compartir a través de


IdnMapping Clase

Definición

Admite el uso de caracteres no ASCII para los 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 Basic Latin), 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 dependiendo de los caracteres dentro del intervalo de caracteres US-ASCII.

El mecanismo IDNA usa Punycode para asignar un nombre de dominio internacionalizado que contiene caracteres Unicode fuera del intervalo de caracteres US-ASCII al intervalo de caracteres US-ASCII admitido por 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) ("xn--")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 etiqueta IDEOGRAPHIC FULL STOP (U+3002), 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

IdnMapping()

Inicializa una nueva instancia de la clase IdnMapping.

Propiedades

AllowUnassigned

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

UseStd3AsciiRules

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

Métodos

Equals(Object)

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

GetAscii(String)

Codifica una cadena de etiquetas de nombre de dominio formadas por caracteres Unicode en una cadena de caracteres Unicode que pueden mostrarse en el intervalo de caracteres US-ASCII. Se da formato a la cadena según el estándar de IDNA.

GetAscii(String, Int32)

Codifica una subcadena de las etiquetas de nombre de dominio que incluyen caracteres Unicode fuera del intervalo de caracteres EE.UU.-ASCII. La subcadena se convierte en una cadena de caracteres Unicode mostrables en el intervalo de caracteres EE.UU.-ASCII y que tienen el formato según el estándar de IDNA.

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 US-ASCII. La subcadena se convierte en una cadena de caracteres Unicode mostrables en el intervalo de caracteres EE.UU.-ASCII y que tienen el formato según el estándar de IDNA.

GetHashCode()

Devuelve un código hash para este objeto IdnMapping.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetUnicode(String)

Descodifica una cadena de una o varias etiquetas de nombre de dominio codificadas según el estándar de internacionalización de nombres de dominio en las aplicaciones (IDNA) como 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 de internacionalización de nombres de dominio en las aplicaciones (IDNA) como una cadena de caracteres Unicode.

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 como una cadena de caracteres Unicode.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

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