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.
Dá suporte ao 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 (Internationalizing Domain Names in Applications) 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 IdnMapping classe dá suporte a diferentes versões do padrão IDNA, dependendo do sistema operacional em uso:
- Quando executado no 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: Internacionalizando nomes de domínio em aplicativos (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 exibiveis no intervalo de pontos de código US-ASCII (U+0020 em U+007E) e acrescenta 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 (período, U+002E). O GetUnicode método, no entanto, não restaura o caractere separador de rótulo original.
Construtores
| Nome | Description |
|---|---|
| IdnMapping() |
Inicializa uma nova instância da classe IdnMapping. |
Propriedades
| Nome | Description |
|---|---|
| AllowUnassigned |
Obtém ou define um valor que indica se pontos de código Unicode não atribuídos são usados em operações executadas por membros do objeto atual IdnMapping . |
| UseStd3AsciiRules |
Obtém ou define um valor que indica se as convenções de nomenclatura padrão ou descontraídas são usadas em operações executadas por membros do objeto atual IdnMapping . |
Métodos
| Nome | Description |
|---|---|
| Equals(Object) |
Indica se um objeto especificado e o objeto atual IdnMapping são iguais. |
| 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 exibivel no intervalo de caracteres US-ASCII e é 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 exibivel no intervalo de caracteres US-ASCII e é formatada de acordo com o padrão IDNA. |
| GetAscii(String) |
Codifica uma cadeia de caracteres de rótulos de nome de domínio que consistem em caracteres Unicode em uma cadeia de caracteres Unicode exibivel no intervalo de caracteres US-ASCII. A cadeia de caracteres é formatada de acordo com o padrão IDNA. |
| GetHashCode() |
Retorna um código hash para este IdnMapping objeto. |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| GetUnicode(String, Int32, Int32) |
Decodifica uma subcadeia de caracteres de um comprimento especificado que contém um ou mais rótulos de nome de domínio, codificados de acordo com o padrão IDNA, para 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, para uma cadeia de caracteres Unicode. |
| 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, para uma cadeia de caracteres Unicode. |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
| TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32) |
Dá suporte ao uso de caracteres não ASCII para nomes de domínio da Internet. Essa classe não pode ser herdada. |
| TryGetUnicode(ReadOnlySpan<Char>, Span<Char>, Int32) |
Dá suporte ao uso de caracteres não ASCII para nomes de domínio da Internet. Essa classe não pode ser herdada. |
Aplica-se a
Acesso thread-safe
Todos os métodos públicos são IdnMapping 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.