IdnMapping Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Supporta l'utilizzo di caratteri non ASCII per i nomi di dominio Internet. La classe non può essere ereditata.
public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
- Ereditarietà
-
IdnMapping
Esempio
Nell'esempio seguente viene usato il GetAscii(String, Int32, Int32) metodo per convertire una matrice di nomi di dominio internazionalizzati in Punycode. Il GetUnicode metodo converte quindi il nome di dominio Punycode nel nome di dominio originale, ma sostituisce i separatori di etichetta originali con il separatore di etichette standard.
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
Commenti
Un nome di dominio Internet è costituito da una o più parti, denominate etichette dei nomi di dominio, separate da separatori di etichette. Ad esempio, il nome di dominio "www.proseware.com" è costituito dalle etichette, "www", "proseware" e "com", separate da punti. I nomi di dominio standard sono costituiti da caratteri designati nell'intervallo di caratteri US-ASCII (o Alfabeto latino di base), da U+0021 a U+007E. Per facilitare l'utilizzo di Internet nelle impostazioni cultura che non usano il set di caratteri US-ASCII, lo standard Internationalizing Domain Names in Applications (IDNA) è stato adottato nel 2003 per supportare l'inclusione di caratteri Unicode all'esterno dell'intervallo di caratteri US-ASCII. Tuttavia, i server dei nomi e la risoluzione dei nomi di dominio continuano a basarsi sui caratteri all'interno dell'intervallo di caratteri US-ASCII.
Il meccanismo IDNA usa Punycode per eseguire il mapping di un nome di dominio internazionalizzato che contiene caratteri Unicode all'esterno dell'intervallo di caratteri US-ASCII all'intervallo di caratteri US-ASCII supportato dal sistema dei nomi di dominio. Il meccanismo IDNA viene usato per convertire solo i nomi di dominio, non i dati trasmessi tramite Internet.
Importante
In .NET Framework 4.5 la IdnMapping classe supporta versioni diverse dello standard IDNA, a seconda del sistema operativo in uso:
- Quando viene eseguito in Windows 8, supporta la versione 2008 dello standard IDNA descritto da RFC 5891: Internationalized Domain Names in Applications (IDNA): Protocol.
- Quando viene eseguito in versioni precedenti del sistema operativo Windows, supporta la versione 2003 dello standard descritto da RFC 3490: Internazionalizzazione dei nomi di dominio nelle applicazioni (IDNA).When run on earlier versions of the Windows operating system, it supports the 2003 version of the standard outlined by RFC 3490: Internationalizing Domain Names in Applications (IDNA).
Vedere Unicode Technical Standard #46: IDNA Compatibility Processing per le differenze nel modo in cui questi standard gestiscono determinati set di caratteri.
Il IdnMapping.GetAscii metodo normalizza un nome di dominio, converte il nome normalizzato in una rappresentazione costituita da caratteri Unicode visualizzabili nell'intervallo di punti di codice US-ASCII (U+0020 in U+007E) e antepone un prefisso di codifica compatibile con ASCII (ACE) a ogni etichetta. Il IdnMapping.GetUnicode metodo ripristina le etichette dei nomi di dominio convertite dal GetAscii metodo .
Se la stringa da convertire include i caratteri separatori di etichette IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) e HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), il GetAscii metodo li converte nel separatore di etichetta FULL STOP (punto, U+002E). Il GetUnicode metodo, tuttavia, non ripristina il carattere separatore dell'etichetta originale.
Costruttori
IdnMapping() |
Inizializza una nuova istanza della classe IdnMapping. |
Proprietà
AllowUnassigned |
Ottiene o imposta un valore che indica se punti di codice Unicode non assegnati vengono utilizzati nelle operazioni eseguite da membri dell'oggetto IdnMapping corrente. |
UseStd3AsciiRules |
Ottiene o imposta un valore che indica se convenzioni di denominazione standard o relaxed vengono utilizzate nelle operazioni eseguite da membri dell'oggetto IdnMapping corrente. |
Metodi
Equals(Object) |
Indica se l'oggetto specificato e l'oggetto IdnMapping sono uguali. |
GetAscii(String) |
Codifica una stringa di etichette del nome di dominio costituite da caratteri Unicode in una stringa di caratteri Unicode visualizzabili compresi nell'intervallo di caratteri US-ASCII. La stringa viene formattata in base allo standard IDNA. |
GetAscii(String, Int32) |
Codifica una sottostringa di etichette di nome di dominio che include caratteri Unicode non compresi nell'intervallo di caratteri US-ASCII. La sottostringa viene convertita in una stringa di caratteri Unicode visualizzabili nell'intervallo di caratteri US-ASCII e formattata in base allo standard IDNA. |
GetAscii(String, Int32, Int32) |
Codifica il numero specificato di caratteri in una sottostringa delle etichette dei nomi di dominio che includono caratteri Unicode all'esterno dell'intervallo di caratteri US-ASCII. La sottostringa viene convertita in una stringa di caratteri Unicode visualizzabili nell'intervallo di caratteri US-ASCII e formattata in base allo standard IDNA. |
GetHashCode() |
Restituisce un codice hash per l'oggetto IdnMapping. |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
GetUnicode(String) |
Decodifica una stringa di una o più etichette del nome di dominio codificate in base allo standard IDNA in una stringa di caratteri Unicode. |
GetUnicode(String, Int32) |
Decodifica una sottostringa di una o più etichette del nome di dominio codificate in base allo standard IDNA in una stringa di caratteri Unicode. |
GetUnicode(String, Int32, Int32) |
Decodifica una sottostringa di una lunghezza specificata contenente una o più etichette del nome di dominio codificate in base allo standard IDNA in una stringa di caratteri Unicode. |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
Si applica a
Thread safety
Tutti i metodi pubblici di IdnMapping sono thread-safe e possono essere usati contemporaneamente da più thread, purché IdnMapping le proprietà dell'istanza non siano impostate contemporaneamente.