IdnMapping.GetAscii Método
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í.
Codifica una cadena de etiquetas de nombre de dominio que incluyen caracteres Unicode fuera del intervalo de caracteres EE.UU.-ASCII en una cadena de caracteres Unicode que se pueden mostrar en el intervalo de caracteres EE.UU.-ASCII (U+0020 a U+007E). Se da formato a la cadena según el estándar de IDNA.
Sobrecargas
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. |
GetAscii(String)
- Source:
- IdnMapping.cs
- Source:
- IdnMapping.cs
- Source:
- IdnMapping.cs
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.
public:
System::String ^ GetAscii(System::String ^ unicode);
public string GetAscii (string unicode);
member this.GetAscii : string -> string
Public Function GetAscii (unicode As String) As String
Parámetros
- unicode
- String
Cadena para convertir, formada por una o más etiquetas de nombre de dominio delimitadas con separadores de etiqueta.
Devoluciones
Equivalente de la cadena especificada por el parámetro unicode
formada por caracteres Unicode que se pueden mostrar en el intervalo de caracteres US-ASCII (U+0020 a U+007E) y con un formato según el estándar IDNA.
Excepciones
unicode
es null
.
unicode
no es válido debido a las propiedades AllowUnassigned y UseStd3AsciiRules, así como al estándar IDNA.
Ejemplos
En el ejemplo siguiente se usa el GetAscii(String) método para convertir una matriz de nombres de dominio internacionalizados en Punycode, que es un equivalente codificado que consta de caracteres en el intervalo de caracteres US-ASCII. A GetUnicode(String) 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
El unicode
parámetro especifica una cadena de una o varias etiquetas que constan de caracteres Unicode válidos. Las etiquetas están separadas por separadores de etiquetas. El unicode
parámetro no puede comenzar con un separador de etiquetas, pero puede incluir y, opcionalmente, terminar con un separador. Los separadores de etiqueta son FULL STOP (punto, U+002E), IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) y HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61). Por ejemplo, el nombre de dominio "www.adatum.com" consta de las etiquetas , "www", "adatum" y "com", separadas por puntos.
Una etiqueta no puede contener ninguno de los caracteres siguientes:
Caracteres de control Unicode de U+0001 a U+001F y U+007F.
Caracteres Unicode sin asignar, si el valor de la AllowUnassigned propiedad es
false
.Caracteres no estándar en el intervalo de caracteres US-ASCII, como los caracteres SPACE (U+0020), EXCLAMATION MARK (U+0021) y LOW LINE (U+005F), si el valor de la UseStd3AsciiRules propiedad es
true
.Caracteres prohibidos por una versión específica del estándar IDNA. Para obtener más información sobre los caracteres prohibidos, vea RFC 3454: Preparación de cadenas internacionalizadas ("stringprep") para IDNA 2003 y RFC 5982: Los puntos de código Unicode y los nombres de dominio internacionalizados para aplicaciones para IDNA 2008.
El GetAscii método convierte todos los separadores de etiqueta en FULL STOP (punto, U+002E).
Si unicode
no contiene caracteres fuera del intervalo de caracteres US-ASCII y no se prohíbe ningún carácter dentro del intervalo de caracteres US-ASCII, el método devuelve unicode
sin cambios.
Notas a los autores de las llamadas
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.
Se aplica a
GetAscii(String, Int32)
- Source:
- IdnMapping.cs
- Source:
- IdnMapping.cs
- Source:
- IdnMapping.cs
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.
public:
System::String ^ GetAscii(System::String ^ unicode, int index);
public string GetAscii (string unicode, int index);
member this.GetAscii : string * int -> string
Public Function GetAscii (unicode As String, index As Integer) As String
Parámetros
- unicode
- String
Cadena para convertir, formada por una o más etiquetas de nombre de dominio delimitadas con separadores de etiqueta.
- index
- Int32
Un desplazamiento de base cero en unicode
que especifica el principio de la subcadena que convertir. La operación de conversión continúa hasta el final de la cadena unicode
.
Devoluciones
El equivalente de la subcadena especificada por los parámetros unicode
y index
formada por caracteres Unicode que se pueden mostrar en el intervalo de caracteres US-ASCII (U+0020 a U+007E) y con un formato según el estándar IDNA.
Excepciones
unicode
es null
.
index
es menor que cero.
O bien
index
es mayor que la longitud de unicode
.
unicode
no es válido debido a las propiedades AllowUnassigned y UseStd3AsciiRules, así como al estándar IDNA.
Comentarios
Los unicode
parámetros y index
definen una subcadena con una o varias etiquetas que constan de caracteres Unicode válidos. Las etiquetas están separadas por separadores de etiquetas. El primer carácter de la subcadena no puede comenzar con un separador de etiquetas, pero puede incluir y, opcionalmente, terminar con un separador. Los separadores de etiqueta son FULL STOP (punto, U+002E), IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) y HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61). Por ejemplo, el nombre de dominio "www.adatum.com" consta de las etiquetas , "www", "adatum" y "com", separadas por puntos.
Una etiqueta no puede contener ninguno de los caracteres siguientes:
Caracteres de control Unicode de U+0001 a U+001F y U+007F.
Caracteres Unicode sin asignar, según el valor de la AllowUnassigned propiedad.
Caracteres no estándar en el intervalo de caracteres US-ASCII, como los caracteres SPACE (U+0020), EXCLAMATION MARK (U+0021) y LOW LINE (U+005F), dependiendo del valor de la UseStd3AsciiRules propiedad.
Caracteres prohibidos por una versión específica del estándar IDNA. Para obtener más información sobre los caracteres prohibidos, vea RFC 3454: Preparación de cadenas internacionalizadas ("stringprep") para IDNA 2003 y RFC 5982: Los puntos de código Unicode y los nombres de dominio internacionalizados para aplicaciones para IDNA 2008.
El GetAscii método convierte todos los separadores de etiqueta en FULL STOP (punto, U+002E).
Si unicode
no contiene caracteres fuera del intervalo de caracteres US-ASCII y no se prohíbe ningún carácter dentro del intervalo de caracteres US-ASCII, el método devuelve unicode
sin cambios.
Notas a los autores de las llamadas
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.
Se aplica a
GetAscii(String, Int32, Int32)
- Source:
- IdnMapping.cs
- Source:
- IdnMapping.cs
- Source:
- IdnMapping.cs
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.
public:
System::String ^ GetAscii(System::String ^ unicode, int index, int count);
public string GetAscii (string unicode, int index, int count);
member this.GetAscii : string * int * int -> string
Public Function GetAscii (unicode As String, index As Integer, count As Integer) As String
Parámetros
- unicode
- String
Cadena para convertir, formada por una o más etiquetas de nombre de dominio delimitadas con separadores de etiqueta.
- index
- Int32
Un desplazamiento de base cero en unicode
que especifica el principio de la subcadena.
- count
- Int32
El número de caracteres para convertir en la subcadena que empieza en la posición especificada por index
en la cadena unicode
.
Devoluciones
El equivalente de la subcadena especificada por los parámetros unicode
, index
y count
, formada por caracteres Unicode que se pueden mostrar en el intervalo de caracteres US-ASCII (U+0020 a U+007E) y con un formato según el estándar IDNA.
Excepciones
unicode
es null
.
index
o count
es menor que cero.
O bien
index
es mayor que la longitud de unicode
.
O bien
index
es mayor que la longitud de unicode
menos count
.
unicode
no es válido debido a las propiedades AllowUnassigned y UseStd3AsciiRules, así como al estándar IDNA.
Ejemplos
En el ejemplo siguiente se usa el GetAscii(String, Int32, Int32) método para convertir un nombre de dominio internacionalizado en un nombre de dominio que cumpla con el estándar IDNA. A GetUnicode(String, Int32, Int32) continuación, el método convierte el nombre de dominio estandarizado en el nombre de dominio original, pero reemplaza los separadores de etiquetas originales por el separador de etiquetas estándar.
// This example demonstrates the GetAscii and GetUnicode methods.
// For sake of illustration, this example uses the most complex
// form of those methods, not the most convenient.
using System;
using System.Globalization;
class Sample
{
public static void Main()
{
/*
Define a domain name consisting of the labels: GREEK SMALL LETTER
PI (U+03C0); IDEOGRAPHIC FULL STOP (U+3002); GREEK SMALL LETTER
THETA (U+03B8); FULLWIDTH FULL STOP (U+FF0E); and "com".
*/
string name = "\u03C0\u3002\u03B8\uFF0Ecom";
string international;
string nonInternational;
string msg1 = "the original non-internationalized \ndomain name:";
string msg2 = "Allow unassigned characters?: {0}";
string msg3 = "Use non-internationalized rules?: {0}";
string msg4 = "Convert the non-internationalized domain name to international format...";
string msg5 = "Display the encoded domain name:\n\"{0}\"";
string msg6 = "the encoded domain name:";
string msg7 = "Convert the internationalized domain name to non-international format...";
string msg8 = "the reconstituted non-internationalized \ndomain name:";
string msg9 = "Visually compare the code points of the reconstituted string to the " +
"original.\n" +
"Note that the reconstituted string contains standard label " +
"separators (U+002e).";
// ----------------------------------------------------------------------------
CodePoints(name, msg1);
// ----------------------------------------------------------------------------
IdnMapping idn = new IdnMapping();
Console.WriteLine(msg2, idn.AllowUnassigned);
Console.WriteLine(msg3, idn.UseStd3AsciiRules);
Console.WriteLine();
// ----------------------------------------------------------------------------
Console.WriteLine(msg4);
international = idn.GetAscii(name, 0, name.Length);
Console.WriteLine(msg5, international);
Console.WriteLine();
CodePoints(international, msg6);
// ----------------------------------------------------------------------------
Console.WriteLine(msg7);
nonInternational = idn.GetUnicode(international, 0, international.Length);
CodePoints(nonInternational, msg8);
Console.WriteLine(msg9);
}
// ----------------------------------------------------------------------------
static void CodePoints(string value, string title)
{
Console.WriteLine("Display the Unicode code points of {0}", title);
foreach (char c in value)
{
Console.Write("{0:x4} ", Convert.ToInt32(c));
}
Console.WriteLine();
Console.WriteLine();
}
}
/*
This code example produces the following results:
Display the Unicode code points of the original non-internationalized
domain name:
03c0 3002 03b8 ff0e 0063 006f 006d
Allow unassigned characters?: False
Use non-internationalized rules?: False
Convert the non-internationalized domain name to international format...
Display the encoded domain name:
"xn--1xa.xn--txa.com"
Display the Unicode code points of the encoded domain name:
0078 006e 002d 002d 0031 0078 0061 002e 0078 006e 002d 002d 0074 0078 0061 002e 0063 006f
006d
Convert the internationalized domain name to non-international format...
Display the Unicode code points of the reconstituted non-internationalized
domain name:
03c0 002e 03b8 002e 0063 006f 006d
Visually compare the code points of the reconstituted string to the original.
Note that the reconstituted string contains standard label separators (U+002e).
*/
' This example demonstrates the GetAscii and GetUnicode methods.
' For sake of illustration, this example uses the most complex
' form of those methods, not the most convenient.
Imports System.Globalization
Class Sample
Public Shared Sub Main()
' Define a domain name consisting of the labels: GREEK SMALL LETTER
' PI (U+03C0); IDEOGRAPHIC FULL STOP (U+3002); GREEK SMALL LETTER
' THETA (U+03B8); FULLWIDTH FULL STOP (U+FF0E); and "com".
Dim name As String = "π。θ.com"
Dim international As String
Dim nonInternational As String
Dim msg1 As String = "the original non-internationalized " & vbCrLf & "domain name:"
Dim msg2 As String = "Allow unassigned characters?: {0}"
Dim msg3 As String = "Use non-internationalized rules?: {0}"
Dim msg4 As String = "Convert the non-internationalized domain name to international format..."
Dim msg5 As String = "Display the encoded domain name:" & vbCrLf & """{0}"""
Dim msg6 As String = "the encoded domain name:"
Dim msg7 As String = "Convert the internationalized domain name to non-international format..."
Dim msg8 As String = "the reconstituted non-internationalized " & vbCrLf & "domain name:"
Dim msg9 As String = "Visually compare the code points of the reconstituted string to the " & _
"original." & vbCrLf & _
"Note that the reconstituted string contains standard label " & _
"separators (U+002e)."
' ----------------------------------------------------------------------------
CodePoints(name, msg1)
' ----------------------------------------------------------------------------
Dim idn As New IdnMapping()
Console.WriteLine(msg2, idn.AllowUnassigned)
Console.WriteLine(msg3, idn.UseStd3AsciiRules)
Console.WriteLine()
' ----------------------------------------------------------------------------
Console.WriteLine(msg4)
international = idn.GetAscii(name, 0, name.Length)
Console.WriteLine(msg5, international)
Console.WriteLine()
CodePoints(international, msg6)
' ----------------------------------------------------------------------------
Console.WriteLine(msg7)
nonInternational = idn.GetUnicode(international, 0, international.Length)
CodePoints(nonInternational, msg8)
Console.WriteLine(msg9)
End Sub
' ----------------------------------------------------------------------------
Shared Sub CodePoints(ByVal value As String, ByVal title As String)
Console.WriteLine("Display the Unicode code points of {0}", title)
Dim c As Char
For Each c In value
Console.Write("{0:x4} ", Convert.ToInt32(c))
Next c
Console.WriteLine()
Console.WriteLine()
End Sub
End Class
'
'This code example produces the following results:
'
'Display the Unicode code points of the original non-internationalized
'domain name:
'03c0 3002 03b8 ff0e 0063 006f 006d
'
'Allow unassigned characters?: False
'Use non-internationalized rules?: False
'
'Convert the non-internationalized domain name to international format...
'Display the encoded domain name:
'"xn--1xa.xn--txa.com"
'
'Display the Unicode code points of the encoded domain name:
'0078 006e 002d 002d 0031 0078 0061 002e 0078 006e 002d 002d 0074 0078 0061 002e 0063 006f
'006d
'
'Convert the internationalized domain name to non-international format...
'Display the Unicode code points of the reconstituted non-internationalized
'domain name:
'03c0 002e 03b8 002e 0063 006f 006d
'
'Visually compare the code points of the reconstituted string to the original.
'Note that the reconstituted string contains standard label separators (U+002e).
'
Comentarios
Los Unicode
parámetros , index
y count
definen una subcadena con una o varias etiquetas que constan de caracteres Unicode válidos. Las etiquetas están separadas por separadores de etiquetas. El primer carácter de la subcadena no puede comenzar con un separador de etiquetas, pero puede incluir y, opcionalmente, terminar con un separador. Los separadores de etiqueta son FULL STOP (punto, U+002E), IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) y HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61). Por ejemplo, el nombre de dominio "www.adatum.com" consta de las etiquetas , "www", "adatum" y "com", separadas por puntos.
Una etiqueta no puede contener ninguno de los caracteres siguientes:
Caracteres de control Unicode de U+0001 a U+001F y U+007F.
Caracteres Unicode sin asignar, según el valor de la AllowUnassigned propiedad.
Caracteres no estándar en el intervalo de caracteres US-ASCII, como los caracteres SPACE (U+0020), EXCLAMATION MARK (U+0021) y LOW LINE (U+005F), dependiendo del valor de la UseStd3AsciiRules propiedad.
Caracteres prohibidos por una versión específica del estándar IDNA. Para obtener más información sobre los caracteres prohibidos, vea RFC 3454: Preparación de cadenas internacionalizadas ("stringprep") para IDNA 2003 y RFC 5982: Los puntos de código Unicode y los nombres de dominio internacionalizados para aplicaciones para IDNA 2008.
El GetAscii método convierte todos los separadores de etiqueta en FULL STOP (punto, U+002E). Si la subcadena no contiene caracteres fuera del intervalo de caracteres US-ASCII y no se prohíbe ningún carácter dentro del intervalo de caracteres US-ASCII, el método devuelve la subcadena sin cambios.
Notas a los autores de las llamadas
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.