IdnMapping Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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:
- Cuando se ejecuta en Windows 8, admite la versión 2008 del estándar IDNA descrito por RFC 5891: Internationalized Domain Names in Applications (IDNA): Protocol.
- Cuando se ejecuta en versiones anteriores del sistema operativo Windows, admite la versión 2003 del estándar descrito por RFC 3490: Internationalizing Domain Names in Applications (IDNA).
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.