Condividi tramite


IdnMapping Classe

Definizione

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:

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.

Vedi anche