Nyelv

IdnMapping Osztály

Definíció

Támogatja a nem ASCII-karakterek használatát az internetes tartománynevekhez. Ez az osztály nem örökölhető.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Öröklődés
IdnMapping

Példák

Az alábbi példa a GetAscii(String, Int32, Int32) nemzetközi tartománynevek tömbjének Punycode-ra való konvertálására használható. A GetUnicode metódus ezután visszaállítja a Punycode tartománynevet az eredeti tartománynévre, de az eredeti címkeelválasztókat lecseréli a szabványos címkeelválasztóra.

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

Megjegyzések

Az internetes tartománynév egy vagy több részből, úgynevezett tartománynévfeliratokból áll, amelyeket címkeelválasztók választanak el egymástól. A "www.proseware.com" tartománynév például a "www", a "proseware" és a "com" címkékből áll, pontokkal elválasztva. A standard tartománynevek az US-ASCII (vagy egyszerű latin betűs) karaktertartományban kijelölt karakterekből állnak, U+0021 és U+007E között. A US-ASCII karakterkészletet nem használó kultúrák internethasználatának megkönnyítése érdekében 2003-ban elfogadták az Internationalizing Domain Names in Applications (IDNA) szabványt, amely támogatja a Unicode-karakterek US-ASCII karaktertartományon kívüli felvételét. A névkiszolgálók és a tartománynévfeloldás azonban továbbra is a US-ASCII karaktertartományon belüli karakterekre támaszkodik.

Az IDNA-mechanizmus a Punycode használatával képez le egy olyan nemzetközi tartománynevet, amely a US-ASCII karaktertartományon kívüli Unicode-karaktereket tartalmaz a tartománynévrendszer által támogatott US-ASCII karaktertartományra. Az IDNA-mechanizmus csak a tartománynevek konvertálására szolgál, az interneten keresztül továbbított adatokra nem.

Important

A .NET Framework 4.5-ben a IdnMapping osztály az IDNA szabvány különböző verzióit támogatja a használt operációs rendszertől függően:

Tekintse meg a Unicode Technical Standard #46: IDNA kompatibilitási feldolgozás című témakört, amely ismerteti, hogy a szabványok hogyan kezelik az adott karakterkészleteket.

A IdnMapping.GetAscii metódus normalizál egy tartománynevet, átalakítja a normalizált nevet egy olyan ábrázolássá, amely a US-ASCII kódponttartományban megjeleníthető Unicode-karakterekből áll (U+0020-ról U+007E-ra), és előszűr egy ASCII-kompatibilis kódolási (ACE) előtagot ("xn---") minden címkére. A IdnMapping.GetUnicode metódus visszaállítja a metódus által konvertált tartománynév-címkéket GetAscii .

Ha a konvertálni kívánt sztring tartalmazza az IDEOGRAPHIC FULL STOP (U+3002), a FULLWIDTH FULL STOP (U+FF0E) és a HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61) feliratelválasztó karaktereket, a GetAscii metódus teljes LEÁLLÍTÁS (pont, U+002E) címkeelválasztóvá alakítja őket. A GetUnicode metódus azonban nem állítja vissza az eredeti címkeelválasztó karaktert.

Konstruktorok

Name Description
IdnMapping()

Inicializálja a IdnMapping osztály új példányát.

Tulajdonságok

Name Description
AllowUnassigned

Lekéri vagy beállítja azt az értéket, amely jelzi, hogy a rendszer nem hozzárendelt Unicode-kódpontokat használ-e az aktuális IdnMapping objektum tagjai által végrehajtott műveletekhez.

UseStd3AsciiRules

Lekéri vagy beállít egy értéket, amely jelzi, hogy az aktuális IdnMapping objektum tagjai által végrehajtott műveletekben szabványos vagy nyugodt elnevezési konvenciók használhatók-e.

Metódusok

Name Description
Equals(Object)

Azt jelzi, hogy egy adott objektum és az aktuális IdnMapping objektum egyenlő-e.

GetAscii(String, Int32, Int32)

A megadott számú karaktert kódolja a tartománynévcímkék olyan részsztringjeiben, amelyek unicode karaktereket tartalmaznak a US-ASCII karaktertartományon kívül. Az alsztring a US-ASCII karaktertartományban megjeleníthető Unicode-karakterekből álló sztringgé alakul, és az IDNA szabványnak megfelelően van formázva.

GetAscii(String, Int32)

A tartománynévcímkék olyan alsztringjeinek kódolása, amelyek Unicode-karaktereket tartalmaznak a US-ASCII karaktertartományon kívül. Az alsztring a US-ASCII karaktertartományban megjeleníthető Unicode-karakterekből álló sztringgé alakul, és az IDNA szabványnak megfelelően van formázva.

GetAscii(String)

Unicode-karakterekből álló tartománynév-sztringet kódol a US-ASCII karaktertartományban megjeleníthető Unicode-karakterekből álló sztringre. A sztring az IDNA szabvány szerint van formázva.

GetHashCode()

Az objektum kivonatkódját IdnMapping adja vissza.

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
GetUnicode(String, Int32, Int32)

Egy megadott hosszúságú alsztringet dekódol, amely egy vagy több, az IDNA szabványnak megfelelően kódolt tartománynévcímkét tartalmaz Unicode-karakterekből álló sztringre.

GetUnicode(String, Int32)

Egy vagy több, az IDNA szabványnak megfelelően kódolt tartománynév-címke alsztringjének kódolása Unicode-karakterekből álló sztringre.

GetUnicode(String)

Egy vagy több, az IDNA szabványnak megfelelően kódolt tartománynévcímkéket tartalmazó sztringet Unicode-karakterekből álló sztringre kódol.

MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)
TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32)

Támogatja a nem ASCII-karakterek használatát az internetes tartománynevekhez. Ez az osztály nem örökölhető.

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

Támogatja a nem ASCII-karakterek használatát az internetes tartománynevekhez. Ez az osztály nem örökölhető.

A következőre érvényes:

Szálbiztonság

Az összes nyilvános metódus IdnMapping szálbiztos, és egyidejűleg több szálból is használható, feltéve, hogy a IdnMapping példány tulajdonságai nem egyidejűleg vannak beállítva.

Lásd még