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 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:
- 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) 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.