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 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änennamensbezeichnungen bezeichnet werden und durch Bezeichnungstrennzeichen getrennt sind. Beispielsweise besteht der Domänenname "www.proseware.com" aus den Bezeichnungen "www", "proseware" und "com", getrennt nach Punkten. Standarddomänennamen bestehen aus bestimmten Zeichen im Zeichenbereich US-ASCII (oder Basic Latin), von U+0021 bis U+007E. Um die Internetnutzung in Kulturen zu erleichtern, die nicht den US-ASCII-Zeichensatz verwenden, wurde 2003 der IdNA-Standard (Internationalizing Domain Names in Applications) eingeführt, um die Einbeziehung von Unicode-Zeichen außerhalb des US-ASCII-Zeichenbereichs zu unterstützen. Die Namenserver und die 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 vom Domänennamensystem unterstützten US-ASCII-Zeichenbereich zuzuordnen. Der IDNA-Mechanismus wird verwendet, um nur Domänennamen zu konvertieren, nicht um Daten, die über das Internet übertragen werden.
Wichtig
Im .NET Framework 4.5 unterstützt die IdnMapping Klasse je nach verwendetem Betriebssystem verschiedene Versionen des IDNA-Standards:
- Wenn sie auf Windows 8 ausgeführt wird, unterstützt sie die Version 2008 des IDNA-Standards, der in RFC 5891: Internationalisierte Domänennamen in Anwendungen (IDNA): Protocol beschrieben ist.
- Wenn sie auf früheren Versionen des Windows-Betriebssystems ausgeführt wird, unterstützt es die Version 2003 des Standards, der in RFC 3490: Internationalisieren von Domänennamen in Anwendungen (IDNA) beschrieben ist.
Unter Unicode Technical Standard #46: IDNA Compatibility Processing (Unicode Technical Standard #46: IDNA-Kompatibilitätsverarbeitung ) finden Sie informationen zu den Unterschieden in der Art und Weise, wie diese Standards bestimmte Zeichensätze behandeln.
Die IdnMapping.GetAscii -Methode normalisiert einen Domänennamen, konvertiert den normalisierten Namen in eine Darstellung, die aus anzeigbaren 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 GetAscii -Methode konvertierten Domänennamensbezeichnungen wieder 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 instance nicht gleichzeitig festgelegt werden.