IdnMapping Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Suporta o uso de caracteres não ASCII para nomes de domínio da Internet. Essa classe não pode ser herdada.
public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
- Herança
-
IdnMapping
Exemplos
O exemplo a seguir usa o GetAscii(String, Int32, Int32) método para converter uma matriz de nomes de domínio internacionalizados em Punycode. Em GetUnicode seguida, o método converte o nome de domínio punycode de volta para o nome de domínio original, mas substitui os separadores de rótulo originais pelo separador de rótulo padrão.
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
Comentários
Um nome de domínio da Internet consiste em uma ou mais partes, chamadas rótulos de nome de domínio, separadas por separadores de rótulo. Por exemplo, o nome de domínio "www.proseware.com" consiste nos rótulos , "www", "proseware" e "com", separados por períodos. Os nomes de domínio padrão consistem em caracteres designados no intervalo de caracteres US-ASCII (ou Latino Básico), de U+0021 a U+007E. Para facilitar o uso da Internet em culturas que não usam o conjunto de caracteres US-ASCII, o padrão IDNA (Nomes de Domínio Internacionalizados em Aplicativos) foi adotado em 2003 para dar suporte à inclusão de caracteres Unicode fora do intervalo de caracteres US-ASCII. No entanto, os servidores de nomes e a resolução de nomes de domínio continuam a depender de caracteres dentro do intervalo de caracteres US-ASCII.
O mecanismo IDNA usa Punycode para mapear um nome de domínio internacionalizado que contém caracteres Unicode fora do intervalo de caracteres US-ASCII para o intervalo de caracteres US-ASCII compatível com o sistema de nomes de domínio. O mecanismo IDNA é usado para converter apenas nomes de domínio, não dados transmitidos pela Internet.
Importante
No .NET Framework 4.5, a classe dá suporte a IdnMapping diferentes versões do padrão IDNA, dependendo do sistema operacional em uso:
- Quando executado em Windows 8, ele dá suporte à versão 2008 do padrão IDNA descrito pelo RFC 5891: Nomes de Domínio Internacionalizados em Aplicativos (IDNA): Protocolo.
- Quando executado em versões anteriores do sistema operacional Windows, ele dá suporte à versão 2003 do padrão descrito pelo RFC 3490: Internationalizing Domain Names in Applications (IDNA).
Consulte Unicode Technical Standard #46: Processamento de Compatibilidade IDNA para obter as diferenças na maneira como esses padrões lidam com conjuntos específicos de caracteres.
O IdnMapping.GetAscii método normaliza um nome de domínio, converte o nome normalizado em uma representação que consiste em caracteres Unicode exibicionáveis no intervalo de pontos de código US-ASCII (U+0020 em U+007E) e prepara um prefixo ACE (codificação compatível com ASCII) ("xn--") para cada rótulo. O IdnMapping.GetUnicode método restaura os rótulos de nome de domínio convertidos pelo GetAscii método .
Se a cadeia de caracteres a ser convertida incluir os caracteres separadores de rótulo IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) e HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), o método os GetAscii converterá no separador de rótulo FULL STOP (ponto, U+002E). O GetUnicode método, no entanto, não restaura o caractere separador de rótulo original.
Construtores
IdnMapping() |
Inicializa uma nova instância da classe IdnMapping. |
Propriedades
AllowUnassigned |
Obtém ou define um valor que indica se os pontos de código Unicode não atribuídos são usados em operações realizadas por membros do objeto IdnMapping atual. |
UseStd3AsciiRules |
Obtém ou define um valor que indica se convenções de nomenclatura padrão ou amenas são usadas em operações realizadas por membros do objeto IdnMapping atual. |
Métodos
Equals(Object) |
Indica se um objeto especificado e o objeto IdnMapping atual são iguais. |
GetAscii(String) |
Codifica uma cadeia de caracteres de rótulos de nome de domínio que consistem em caracteres Unicode para uma cadeia de caracteres Unicode exibíveis no intervalo de caracteres US-ASCII. A cadeia de caracteres é formatada de acordo com o padrão IDNA. |
GetAscii(String, Int32) |
Codifica uma subcadeia de caracteres de rótulos de nome de domínio que incluem caracteres Unicode fora do intervalo de caracteres US-ASCII. A subcadeia de caracteres é convertida em uma cadeia de caracteres Unicode exibíveis no intervalo de caracteres US-ASCII e é formatada segundo o padrão IDNA. |
GetAscii(String, Int32, Int32) |
Codifica o número especificado de caracteres em uma subcadeia de caracteres de rótulos de nome de domínio que incluem caracteres Unicode fora do intervalo de caracteres US-ASCII. A subcadeia de caracteres é convertida em uma cadeia de caracteres Unicode exibíveis no intervalo de caracteres US-ASCII e é formatada segundo o padrão IDNA. |
GetHashCode() |
Retorna um código hash para esse objeto IdnMapping. |
GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
GetUnicode(String) |
Decodifica uma cadeia de caracteres de um ou mais rótulos de nome de domínio, codificados de acordo com o padrão IDNA, em uma cadeia de caracteres Unicode. |
GetUnicode(String, Int32) |
Decodifica uma subcadeia de caracteres de um ou mais rótulos de nome de domínio, codificados de acordo com o padrão IDNA, em uma cadeia de caracteres Unicode. |
GetUnicode(String, Int32, Int32) |
Decodifica uma subcadeia de caracteres de um tamanho especificado que contém um ou mais rótulos de nome de domínio, codificados de acordo com o padrão IDNA, em uma cadeia de caracteres Unicode. |
MemberwiseClone() |
Cria uma cópia superficial do Object atual. (Herdado de Object) |
ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Aplica-se a
Acesso thread-safe
Todos os métodos públicos de IdnMapping são thread-safe e podem ser usados simultaneamente de vários threads, desde que as IdnMapping propriedades da instância também não sejam definidas simultaneamente.