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 wieder in den ursprünglichen Domänennamen, ersetzt aber 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änennamensbezeichnungen bezeichnet werden, getrennt durch Bezeichnungstrennzeichen. Beispielsweise besteht der Domänenname "www.proseware.com" aus den Bezeichnungen "www", "proseware" und "com", getrennt durch Punkte. Standarddomänennamen bestehen aus bestimmten Zeichen im Zeichenbereich US-ASCII (oder standard lateinisch) von U+0021 bis U+007E. Um die Internetnutzung in Kulturen zu erleichtern, die den US-ASCII Zeichensatz nicht verwenden, wurde der Internationalizing Domain Names in Applications (IDNA)-Standard 2003 eingeführt, um die Einbeziehung von Unicode-Zeichen außerhalb des US-ASCII Zeichenbereichs zu unterstützen. Die Namensserver und die Auflösung von Domänennamen basieren jedoch weiterhin auf Zeichen innerhalb des US-ASCII Zeichenbereichs.

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

Important

In .NET Framework 4.5 unterstützt die IdnMapping Klasse unterschiedliche Versionen des IDNA-Standards, je nachdem, welches Betriebssystem verwendet wird:

Siehe Unicode Technical Standard #46: IDNA Compatibility Processing für die Unterschiede in der Art und Weise, wie diese Standards bestimmte Zeichensätze behandeln.

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

Wenn die zu konvertierende Zeichenfolge die Beschriftungstrennzeichen 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

Name Beschreibung
IdnMapping()

Initialisiert eine neue Instanz der IdnMapping-Klasse.

Eigenschaften

Name Beschreibung
AllowUnassigned

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob nicht zugewiesene Unicode-Codepunkte in Vorgängen verwendet werden, die von Elementen des aktuellen IdnMapping Objekts ausgeführt werden.

UseStd3AsciiRules

Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob Standard- oder entspannten Benennungskonventionen in Vorgängen verwendet werden, die von Membern des aktuellen IdnMapping Objekts ausgeführt werden.

Methoden

Name Beschreibung
Equals(Object)

Gibt an, ob ein angegebenes Objekt und das aktuelle IdnMapping Objekt gleich sind.

GetAscii(String, Int32, Int32)

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

GetAscii(String, Int32)

Codiert eine Teilzeichenfolge von Domänennamenbezeichnungen, die Unicode-Zeichen außerhalb des US-ASCII Zeichenbereichs enthalten. Die Teilzeichenfolge wird in eine Zeichenfolge mit angezeigten Unicode-Zeichen im US-ASCII Zeichenbereich konvertiert und gemäß dem IDNA-Standard formatiert.

GetAscii(String)

Codiert eine Zeichenfolge von Domänennamenbezeichnungen, die aus Unicode-Zeichen bestehen, in einer Zeichenfolge mit angezeigten Unicode-Zeichen im US-ASCII Zeichenbereich. Die Zeichenfolge wird gemäß dem IDNA-Standard formatiert.

GetHashCode()

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

GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
GetUnicode(String, Int32, Int32)

Decodiert eine Teilzeichenfolge einer angegebenen Länge, die eine oder mehrere Domänennamensbezeichnungen enthält, die gemäß dem IDNA-Standard codiert sind, in eine Zeichenfolge von Unicode-Zeichen.

GetUnicode(String, Int32)

Decodiert eine Teilzeichenfolge einer oder mehrerer Domänennamenbezeichnungen, die gemäß dem IDNA-Standard codiert sind, einer Zeichenfolge von Unicode-Zeichen.

GetUnicode(String)

Decodiert eine Zeichenfolge mit einer oder mehreren Domänennamenbezeichnungen, die gemäß dem IDNA-Standard codiert sind, einer Zeichenfolge von Unicode-Zeichen.

MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

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

(Geerbt von Object)
TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32)

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

TryGetUnicode(ReadOnlySpan<Char>, Span<Char>, Int32)

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

Gilt für:

Threadsicherheit

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

Weitere Informationen