Partage via


IdnMapping Classe

Définition

Prend en charge l'utilisation de caractères non ASCII pour les noms de domaines Internet. Cette classe ne peut pas être héritée.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Héritage
IdnMapping

Exemples

L’exemple suivant utilise la GetAscii(String, Int32, Int32) méthode pour convertir un tableau de noms de domaine internationalisés en Punycode. La GetUnicode méthode convertit ensuite le nom de domaine Punycode en nom de domaine d’origine, mais remplace les séparateurs d’étiquettes d’origine par le séparateur d’étiquette 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

Remarques

Un nom de domaine Internet se compose d’une ou plusieurs parties, appelées étiquettes de nom de domaine, séparées par des séparateurs d’étiquettes. Par exemple, le nom de domaine « www.proseware.com » se compose des étiquettes , « www », « proseware » et « com », séparées par des points. Les noms de domaine standard se composent de caractères désignés dans la plage de caractères US-ASCII (ou latin de base), de U+0021 à U+007E. Pour faciliter l’utilisation d’Internet dans les cultures qui n’utilisent pas le jeu de caractères US-ASCII, la norme IDNA (Internationalizing Domain Names in Applications) a été adoptée en 2003 pour prendre en charge l’inclusion de caractères Unicode en dehors de la plage de caractères US-ASCII. Toutefois, les serveurs de noms et la résolution de noms de domaine continuent de s’appuyer sur les caractères de la plage de caractères US-ASCII.

Le mécanisme IDNA utilise Punycode pour mapper un nom de domaine internationalisé qui contient des caractères Unicode en dehors de la plage de caractères US-ASCII à la plage de caractères US-ASCII prise en charge par le système de noms de domaine. Le mécanisme IDNA est utilisé pour convertir uniquement les noms de domaine, et non les données transmises via Internet.

Important

Dans .NET Framework 4.5, la IdnMapping classe prend en charge différentes versions de la norme IDNA, en fonction du système d’exploitation utilisé :

Consultez La norme technique Unicode #46 : Traitement de compatibilité IDNA pour connaître les différences dans la façon dont ces normes gèrent des jeux de caractères particuliers.

La IdnMapping.GetAscii méthode normalise un nom de domaine, convertit le nom normalisé en une représentation qui se compose de caractères Unicode affichables dans la plage de points de code US-ASCII (U+0020 à U+007E) et ajoute un préfixe d’encodage compatible ASCII (ACE) (« xn-- ») à chaque étiquette. La IdnMapping.GetUnicode méthode restaure les étiquettes de nom de domaine converties par la GetAscii méthode .

Si la chaîne à convertir inclut les caractères séparateurs d’étiquettes IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) et HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), la GetAscii méthode les convertit en séparateur d’étiquettes FULL STOP (point, U+002E). Toutefois GetUnicode , la méthode ne restaure pas le caractère séparateur d’étiquette d’origine.

Constructeurs

IdnMapping()

Initialise une nouvelle instance de la classe IdnMapping.

Propriétés

AllowUnassigned

Obtient ou définit une valeur qui indique si les points de code Unicode non assignés sont utilisés dans les opérations exécutées par les membres de l'objet IdnMapping actuel.

UseStd3AsciiRules

Obtient ou définit une valeur qui indique si les conventions d'affectation de noms standard ou assouplies sont utilisées dans des opérations exécutées par les membres de l'objet IdnMapping actuel.

Méthodes

Equals(Object)

Indique si un objet spécifié et l'objet IdnMapping actif sont égaux.

GetAscii(String)

Encode une chaîne d'étiquettes de nom de domaine qui se composent de caractères Unicode en une chaîne de caractères Unicode affichables dans la plage de caractères US-ASCII. La chaîne est mise en forme selon la norme IDNA.

GetAscii(String, Int32)

Encode une sous-chaîne d'étiquettes du nom de domaine qui inclue des caractères Unicode en dehors de la plage de caractères US-ASCII. La sous-chaîne est convertie en une chaîne de caractères Unicode affichables appartenant à la plage de caractères US-ASCII et est mise en forme selon la norme IDNA.

GetAscii(String, Int32, Int32)

Encode le nombre spécifié de caractères dans une sous-chaîne d’étiquettes de noms de domaine qui incluent des caractères Unicode en dehors de la plage de caractères US-ASCII. La sous-chaîne est convertie en une chaîne de caractères Unicode affichables appartenant à la plage de caractères US-ASCII et est mise en forme selon la norme IDNA.

GetHashCode()

Retourne un code de hachage pour cet objet IdnMapping.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
GetUnicode(String)

Décode une chaîne d'une ou de plusieurs étiquettes de noms de domaine encodées selon la norme IDNA dans une chaîne de caractères Unicode.

GetUnicode(String, Int32)

Décode une sous-chaîne d'une ou de plusieurs étiquettes de noms de domaine encodées selon la norme IDNA dans une chaîne de caractères Unicode.

GetUnicode(String, Int32, Int32)

Décode une sous-chaîne d'une longueur spécifiée qui contient une ou plusieurs étiquettes de nom de domaine, encodées selon la norme IDNA en une chaîne de caractères Unicode.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Cohérence de thread

Toutes les méthodes publiques de IdnMapping sont thread-safe et peuvent être utilisées simultanément à partir de plusieurs threads, tant que les IdnMapping propriétés du instance ne sont pas également définies simultanément.

Voir aussi