IdnMapping Klasse

Definition

Unterstützt die Verwendung von Nicht-ASCII-Zeichen für Internetdomänennamen. Diese Klasse kann nicht vererbt werden.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Vererbung
IdnMapping

Beispiele

Im folgenden Beispiel wird die GetAscii(String, Int32, Int32) -Methode verwendet, um ein Array von internationalisierten Domänennamen in Punycode zu konvertieren. Die GetUnicode -Methode konvertiert dann den Punycode-Domänennamen zurück in den ursprünglichen Domänennamen, ersetzt jedoch die ursprünglichen Bezeichnungstrennzeichen durch das Standardbezeichnungstrennzeichen.

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

Hinweise

Ein Internetdomänenname besteht aus einem oder mehreren Teilen, die als Domänennamenbezeichnungen bezeichnet werden und durch Bezeichnungstrennzeichen getrennt sind. Beispielsweise besteht der Domänenname "www.proseware.com" aus den Bezeichnungen "www", "proseware" und "com", getrennt durch Zeiträume. Standarddomänennamen bestehen aus bestimmten Zeichen im US-ASCII-Zeichenbereich (oder Basic Latin), von U+0021 bis U+007E. Um die Internetverwendung in Kulturen zu erleichtern, die nicht den US-ASCII-Zeichensatz verwenden, wurde der IDNA-Standard (Internationalizing Domain Names in Applications) 2003 eingeführt, um die Aufnahme von Unicode-Zeichen außerhalb des US-ASCII-Zeichenbereichs zu unterstützen. Namenserver und Domänennamenauflösung basieren jedoch weiterhin auf Zeichen innerhalb des US-ASCII-Zeichenbereichs.

Der IDNA-Mechanismus verwendet Punycode, um einen internationalisierten Domänennamen, der Unicode-Zeichen außerhalb des US-ASCII-Zeichenbereichs enthält, dem US-ASCII-Zeichenbereich zuzuordnen, der vom Domänennamensystem unterstützt wird. Der IDNA-Mechanismus wird verwendet, um nur Domänennamen zu konvertieren, nicht Daten, die über das Internet übertragen werden.

Wichtig

Im .NET Framework 4.5 unterstützt die -Klasse je nach verwendeten IdnMapping Betriebssystem verschiedene Versionen des IDNA-Standards:

Unter Unicode Technical Standard #46: IDNA Compatibility Processing (Unicode Technical Standard #46: IDNA-Kompatibilitätsverarbeitung) finden Sie informationen zu den Unterschieden bei der Behandlung bestimmter Zeichensätze durch diese Standards.

Die IdnMapping.GetAscii -Methode normalisiert einen Domänennamen, konvertiert den normalisierten Namen in eine Darstellung, die aus darstellbaren Unicode-Zeichen im US-ASCII-Codepunktbereich (U+0020 bis U+007E) besteht, und stellt jeder Bezeichnung ein ASCII-kompatibles Codierungspräfix (ACE) ("xn--") voran. Die IdnMapping.GetUnicode -Methode stellt die von der -Methode konvertierten Domänennamenbezeichnungen wieder GetAscii her.

Wenn die zu konvertierende Zeichenfolge die Bezeichnungstrennzeichen IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) und HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61) enthält, konvertiert die GetAscii Methode sie in das Bezeichnungstrennzeichen FULL STOP (Punkt, U+002E). Die GetUnicode -Methode stellt jedoch das ursprüngliche Bezeichnungstrennzeichen nicht wieder her.

Konstruktoren

IdnMapping()

Initialisiert eine neue Instanz der IdnMapping-Klasse.

Eigenschaften

AllowUnassigned

Ruft einen Wert ab, der angibt, ob in Vorgängen, die von den Membern des aktuellen IdnMapping-Objekts durchgeführt werden, nicht zugewiesene Codepunkte verwendet werden, oder legt diesen fest.

UseStd3AsciiRules

Ruft einen Wert ab, der angibt, ob in Vorgängen, die von den Membern des aktuellen IdnMapping-Objekts durchgeführt werden, dem Standard entsprechende oder gelockerte Namenskonventionen verwendet werden, oder legt diesen fest.

Methoden

Equals(Object)

Gibt an, ob das angegebene Objekt und das aktuelle IdnMapping-Objekt gleich sind.

GetAscii(String)

Codiert eine Zeichenfolge von Domänennamensbezeichnungen, die aus Unicode-Zeichen bestehen, in eine Zeichenfolge aus anzeigbaren Unicode-Zeichen im US-ASCII-Zeichenbereich. Die Zeichenfolge wird entsprechend dem IDNA-Standard formatiert.

GetAscii(String, Int32)

Codiert eine Teilzeichenfolge Domänennamensbezeichnungen, die Unicode-Zeichen außerhalb des US-ASCII-Zeichenbereichs enthalten. Die Teilzeichenfolge wird in eine Zeichenfolge aus anzeigbaren Unicode-Zeichen im US-ASCII-Zeichenbereich konvertiert und wird entsprechend dem IDNA-Standard formatiert.

GetAscii(String, Int32, Int32)

Codiert die angegebene Anzahl von Zeichen in einer Teilzeichenfolge von Domänennamensbezeichnungen, die Unicode-Zeichen außerhalb des US-ASCII-Zeichenbereichs enthalten. Die Teilzeichenfolge wird in eine Zeichenfolge aus anzeigbaren Unicode-Zeichen im US-ASCII-Zeichenbereich konvertiert und wird entsprechend dem IDNA-Standard formatiert.

GetHashCode()

Gibt einen Hashcode für dieses IdnMapping-Objekt zurück.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
GetUnicode(String)

Decodiert eine Zeichenfolge aus einer oder mehreren Domänennamensbezeichnungen, die entsprechend des IDNA-Standards codiert sind, in eine Zeichenfolge aus Unicode-Zeichen.

GetUnicode(String, Int32)

Decodiert eine Teilzeichenfolge aus einer oder mehreren Domänennamensbezeichnungen, die entsprechend des IDNA-Standards codiert sind, in eine Zeichenfolge aus Unicode-Zeichen.

GetUnicode(String, Int32, Int32)

Decodiert eine Teilzeichenfolge einer angegebenen Länge, die eine oder mehrere Domänennamensbezeichnungen enthält, die entsprechend des IDNA-Standards codiert sind, in eine Zeichenfolge aus Unicode-Zeichen.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für

Threadsicherheit

Alle öffentlichen Methoden von IdnMapping sind threadsicher und können gleichzeitig von mehreren Threads verwendet werden, solange die Eigenschaften der IdnMapping Instanz nicht gleichzeitig festgelegt werden.

Siehe auch