Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo IdnMapping.GetAscii (String, Int32)

 

Data di pubblicazione: ottobre 2016

Codifica una sottostringa di etichette del nome di dominio che includono i caratteri Unicode non compreso nell'intervallo di caratteri US-ASCII. La sottostringa viene convertita in una stringa di caratteri Unicode visualizzabili compresi nell'intervallo di caratteri US-ASCII e viene formattata in base allo standard IDNA.

Spazio dei nomi:   System.Globalization
Assembly:  mscorlib (in mscorlib.dll)

public string GetAscii(
	string unicode,
	int index
)

Parametri

unicode
Type: System.String

Stringa da convertire, costituito da uno o più etichette del nome di dominio delimitate da separatori di etichetta.

index
Type: System.Int32

Un offset in base zero in unicode che specifica l'inizio della sottostringa da convertire. L'operazione di conversione continua fino alla fine del unicode stringa.

Valore restituito

Type: System.String

L'equivalente della sottostringa specificata per il unicode e index parametri, costituito da caratteri Unicode visualizzabili in US-ASCII (da U + 0020 a U + 007E) intervallo di caratteri e formattati in base allo standard IDNA.

Exception Condition
ArgumentNullException

unicode è null.

ArgumentOutOfRangeException

index è minore di zero.

-oppure-

index è maggiore della lunghezza di unicode.

ArgumentException

unicode è valido in base il AllowUnassigned e UseStd3AsciiRules proprietà e lo standard IDNA.

Il unicode e index i parametri definiscono una sottostringa con una o più etichette che sono costituiti da caratteri Unicode validi. Le etichette sono separate da separatori di etichetta. Il primo carattere della sottostringa non può iniziare con un separatore di etichetta, ma può includere e facoltativamente terminare con un separatore. I separatori di etichetta FULL STOP (punto, U + 002E), IDEOGRAFICI FULL STOP (U + 3002), pieno (U + FF0E) e arresto totale IDEOGRAFICI angolare (U + FF61). Ad esempio, il nome di dominio "www.adatum.com" è costituito dalle etichette, "www", "adatum" e "com", separati da punti.

Un'etichetta non può contenere i caratteri seguenti:

Il GetAscii metodo converte tutti i separatori di etichetta in FULL STOP (punto, U + 002E).

Se unicode non contenga caratteri US-ASCII di fuori intervallo di caratteri e caratteri all'interno dell'intervallo di caratteri US-ASCII non sono consentiti, il metodo restituisce unicode invariato.

Note per i chiamanti:

Nel .NET Framework 4.5, IdnMapping classe supporta diverse versioni dello standard IDNA, a seconda del sistema operativo in uso:

Vedere Unicode Technical Standard #46: IDNA Compatibility Processing per le differenze nel modo di gestire questi standard specifici set di caratteri.

Nell'esempio seguente rimuove la parte locale e il carattere da un indirizzo di posta elettronica e passa @ nome dominio risulta per il GetAscii(String, Int32) metodo per creare un nome di dominio Punycode equivalente codificata costituito da caratteri nell'intervallo di caratteri US-ASCII. Il GetUnicode(String, Int32, Int32) metodo quindi converte il nome di dominio Punycode al nome di dominio originale, ma sostituisce separatori di etichetta originali con il separatore di etichetta standard.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] names = { "johann_doe@bücher.com", "vi@мойдомен.рф", "ia@παράδειγμα.δοκιμή",
                         "webmaster@mycharity\u3002org",
                         "admin@prose\u0000ware.com", "john_doe@proseware..com", 
                         "jane_doe@a.org", "me@my_company.com" };
      IdnMapping idn = new IdnMapping();

      foreach (var thisName in names) {
         string name = thisName;
         try {
            int position = name.LastIndexOf("@");
            if (position >= 0) 
               name = name.Substring(position + 1);

            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 += String.Format("U+{0} ", Convert.ToUInt16(ch).ToString("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

Universal Windows Platform
Disponibile da 10
.NET Framework
Disponibile da 2.0
Torna all'inizio
Mostra: