Condividi tramite


IdnMapping Classe

Definizione

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:

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.

Vedi anche