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'uso di caratteri non ASCII per i nomi di dominio Internet. Questa 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 etichetta. 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 al di fuori 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 al di fuori 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 nelle versioni precedenti del sistema operativo Windows, supporta la versione 2003 dello standard descritto da RFC 3490: Internazionalizzazione dei nomi di dominio nelle applicazioni (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 etichetta 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 etichette FULL STOP (punto, U+002E). Il GetUnicode metodo, tuttavia, non ripristina il carattere separatore dell'etichetta originale.
Costruttori
| Nome | Descrizione |
|---|---|
| IdnMapping() |
Inizializza una nuova istanza della classe IdnMapping. |
Proprietà
| Nome | Descrizione |
|---|---|
| AllowUnassigned |
Ottiene o imposta un valore che indica se i punti di codice Unicode non assegnati vengono utilizzati nelle operazioni eseguite dai membri dell'oggetto corrente IdnMapping . |
| UseStd3AsciiRules |
Ottiene o imposta un valore che indica se le convenzioni di denominazione standard o rilassate vengono utilizzate nelle operazioni eseguite dai membri dell'oggetto corrente IdnMapping . |
Metodi
| Nome | Descrizione |
|---|---|
| Equals(Object) |
Indica se un oggetto specificato e l'oggetto corrente IdnMapping sono uguali. |
| GetAscii(String, Int32, Int32) |
Codifica il numero specificato di caratteri in una sottostringa delle etichette dei nomi di dominio che includono caratteri Unicode al di fuori dell'intervallo di caratteri US-ASCII. La sottostringa viene convertita in una stringa di caratteri Unicode visualizzabili nell'intervallo di caratteri US-ASCII ed è formattata in base allo standard IDNA. |
| GetAscii(String, Int32) |
Codifica 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 ed è formattata in base allo standard IDNA. |
| GetAscii(String) |
Codifica una stringa di etichette dei nomi di dominio costituite da caratteri Unicode in una stringa di caratteri Unicode visualizzabili nell'intervallo di caratteri US-ASCII. La stringa viene formattata in base allo standard IDNA. |
| GetHashCode() |
Restituisce un codice hash per questo IdnMapping oggetto. |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| GetUnicode(String, Int32, Int32) |
Decodifica una sottostringa di una lunghezza specificata che contiene una o più etichette dei nomi di dominio, codificate in base allo standard IDNA, a una stringa di caratteri Unicode. |
| GetUnicode(String, Int32) |
Decodifica una sottostringa di una o più etichette dei nomi di dominio, codificate in base allo standard IDNA, in una stringa di caratteri Unicode. |
| GetUnicode(String) |
Decodifica una stringa di una o più etichette dei nomi di dominio, codificate in base allo standard IDNA, in una stringa di caratteri Unicode. |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
| TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32) |
Supporta l'uso di caratteri non ASCII per i nomi di dominio Internet. Questa classe non può essere ereditata. |
| TryGetUnicode(ReadOnlySpan<Char>, Span<Char>, Int32) |
Supporta l'uso di caratteri non ASCII per i nomi di dominio Internet. Questa classe non può essere ereditata. |
Si applica a
Thread safety
Tutti i metodi pubblici di IdnMapping sono thread-safe e possono essere usati simultaneamente da più thread, purché le IdnMapping proprietà dell'istanza non vengano impostate simultaneamente.