IdnMapping Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Ondersteunt het gebruik van niet-ASCII-tekens voor internetdomeinnamen. Deze klasse kan niet worden overgenomen.
public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
- Overname
-
IdnMapping
Voorbeelden
In het volgende voorbeeld wordt de GetAscii(String, Int32, Int32) methode gebruikt om een matrix met geinternationaliseerde domeinnamen te converteren naar Punycode. De GetUnicode methode converteert vervolgens de Punycode-domeinnaam terug naar de oorspronkelijke domeinnaam, maar vervangt de oorspronkelijke labelscheidingstekens door het standaardlabelscheidingsteken.
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
Opmerkingen
Een internetdomeinnaam bestaat uit een of meer onderdelen, genaamd domeinnaamlabels, gescheiden door labelscheidingstekens. De domeinnaamwww.proseware.combestaat bijvoorbeeld uit de labels www, proseware en com, gescheiden door punten. Standaarddomeinnamen bestaan uit aangewezen tekens in het tekenbereik US-ASCII (of Basic Latin), van U+0021 tot U+007E. Ter bevordering van internetgebruik in culturen die niet gebruikmaken van de US-ASCII tekenset, werd in 2003 de standaard Internationalizing Domain Names in Applications (IDNA) gebruikt ter ondersteuning van de opname van Unicode-tekens buiten het US-ASCII tekenbereik. Naamservers en domeinnaamomzetting blijven echter afhankelijk van tekens binnen het US-ASCII tekenbereik.
Het IDNA-mechanisme gebruikt Punycode om een geinternationaliseerde domeinnaam die Unicode-tekens bevat buiten het US-ASCII tekenbereik toe te wijzen aan het US-ASCII tekenbereik dat wordt ondersteund door het domeinnaamsysteem. Het IDNA-mechanisme wordt gebruikt om alleen domeinnamen te converteren, niet gegevens die via internet worden verzonden.
Important
In het .NET Framework 4.5 ondersteunt de klasse IdnMapping verschillende versies van de IDNA-standaard, afhankelijk van het besturingssysteem dat wordt gebruikt:
- Wanneer deze wordt uitgevoerd op Windows 8, ondersteunt deze de 2008-versie van de IDNA-standaard die wordt beschreven door RFC 5891: Geinternationaliseerde domeinnamen in toepassingen (IDNA): Protocol.
- Wanneer het wordt uitgevoerd op eerdere versies van het Windows besturingssysteem, ondersteunt het de 2003-versie van de standaard die wordt beschreven door RFC 3490: Domeinnamen internationaliseren in toepassingen (IDNA).
Zie Unicode Technical Standard #46: IDNA-compatibiliteitsverwerking voor de verschillen in de manier waarop deze standaarden bepaalde sets tekens verwerken.
De IdnMapping.GetAscii methode normaliseert een domeinnaam, converteert de genormaliseerde naam naar een weergave die bestaat uit weer te geven Unicode-tekens in het US-ASCII codepuntbereik (U+0020 naar U+007E) en prependseert een ASCII-compatibel coderingsvoorvoegsel (xn--) naar elk label. Met IdnMapping.GetUnicode de methode worden de domeinnaamlabels hersteld die door de GetAscii methode zijn geconverteerd.
Als de tekenreeks die moet worden geconverteerd, de labelscheidingstekens IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) en HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61) bevat, worden deze met de GetAscii methode geconverteerd naar het labelscheidingsteken FULL STOP (punt, U+002E). Met de GetUnicode methode wordt het oorspronkelijke labelscheidingsteken echter niet hersteld.
Constructors
| Name | Description |
|---|---|
| IdnMapping() |
Initialiseert een nieuw exemplaar van de IdnMapping klasse. |
Eigenschappen
| Name | Description |
|---|---|
| AllowUnassigned |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of niet-toegewezen Unicode-codepunten worden gebruikt in bewerkingen die worden uitgevoerd door leden van het huidige IdnMapping object. |
| UseStd3AsciiRules |
Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of standaard- of ontspannen naamconventies worden gebruikt in bewerkingen die worden uitgevoerd door leden van het huidige IdnMapping object. |
Methoden
| Name | Description |
|---|---|
| Equals(Object) |
Geeft aan of een opgegeven object en het huidige IdnMapping object gelijk zijn. |
| GetAscii(String, Int32, Int32) |
Codeert het opgegeven aantal tekens in een subtekenreeks van domeinnaamlabels die Unicode-tekens bevatten buiten het US-ASCII tekenbereik. De subtekenreeks wordt geconverteerd naar een tekenreeks met weer te geven Unicode-tekens in het US-ASCII tekenbereik en wordt opgemaakt volgens de IDNA-standaard. |
| GetAscii(String, Int32) |
Codeert een subtekenreeks van domeinnaamlabels die Unicode-tekens bevatten buiten het US-ASCII tekenbereik. De subtekenreeks wordt geconverteerd naar een tekenreeks met weer te geven Unicode-tekens in het US-ASCII tekenbereik en wordt opgemaakt volgens de IDNA-standaard. |
| GetAscii(String) |
Codeert een tekenreeks met domeinnaamlabels die uit Unicode-tekens bestaan tot een tekenreeks met weer te geven Unicode-tekens in het US-ASCII tekenbereik. De tekenreeks is opgemaakt volgens de IDNA-standaard. |
| GetHashCode() |
Retourneert een hash-code voor dit IdnMapping object. |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| GetUnicode(String, Int32, Int32) |
Decodeert een subtekenreeks van een opgegeven lengte die een of meer domeinnaamlabels bevat, gecodeerd volgens de IDNA-standaard, naar een tekenreeks met Unicode-tekens. |
| GetUnicode(String, Int32) |
Decodeert een subtekenreeks van een of meer domeinnaamlabels, gecodeerd volgens de IDNA-standaard, naar een tekenreeks met Unicode-tekens. |
| GetUnicode(String) |
Decodeert een tekenreeks van een of meer domeinnaamlabels, gecodeerd volgens de IDNA-standaard, naar een tekenreeks met Unicode-tekens. |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Retourneert een tekenreeks die het huidige object vertegenwoordigt. (Overgenomen van Object) |
Van toepassing op
Veiligheid thread
Alle openbare methoden zijn IdnMapping thread-veilig en kunnen gelijktijdig worden gebruikt vanuit meerdere threads, zolang de eigenschappen van het IdnMapping exemplaar niet ook gelijktijdig worden ingesteld.