IdnMapping Klas

Definitie

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:

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.

Zie ook