IdnMapping Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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:
- Wenn sie unter Windows 8 ausgeführt wird, unterstützt sie die 2008-Version des IDNA-Standards, der von RFC 5891: Internationalized Domain Names in Applications (IDNA): Protocol beschrieben wird.
- Wenn sie auf früheren Versionen des Windows-Betriebssystems ausgeführt wird, unterstützt sie die 2003-Version des von RFC 3490 beschriebenen Standards: Internationalisieren von Domänennamen in Anwendungen (IDNA).
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.