IdnMapping Třída

Definice

Podporuje použití znaků jiných než ASCII pro názvy internetových domén. Tuto třídu nelze zdědit.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Dědičnost
IdnMapping

Příklady

Následující příklad používá metodu GetAscii(String, Int32, Int32) k převodu pole mezinárodních názvů domén na Punycode. Metoda GetUnicode pak převede název domény Punycode zpět na původní název domény, ale nahradí původní oddělovače popisků standardním oddělovačem popisků.

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

Poznámky

Název internetové domény se skládá z jedné nebo více částí, označovaných jako popisky názvů domén oddělených oddělovači popisků. Například název domény "www.proseware.com" se skládá z popisků, "www", "proseware" a "com", oddělených tečkami. Standardní názvy domén se skládají z určených znaků v rozsahu znaků US-ASCII (nebo základní latinka), od U+0021 do U+007E. Pro usnadnění používání internetu v jazykových verzích, které nepoužívají znakovou sadu US-ASCII, byl standard Internationalizing Domain Names in Applications (IDNA) přijat v roce 2003, aby podporoval zahrnutí znaků Unicode mimo rozsah znaků US-ASCII. Názvové servery a překlad názvů domén ale nadále spoléhají na znaky v rozsahu znaků US-ASCII.

Mechanismus IDNA používá punycode k mapování mezinárodního názvu domény, který obsahuje znaky Unicode mimo rozsah znaků US-ASCII na rozsah znaků US-ASCII podporovaný systémem názvů domén. Mechanismus IDNA slouží k převodu pouze názvů domén, nikoli dat přenášených přes internet.

Important

V rozhraní .NET Framework 4.5 IdnMapping třída podporuje různé verze standardu IDNA v závislosti na používaném operačním systému:

Informace o rozdílech ve způsobu, jakým tyto standardy zpracovávají konkrétní sady znaků, najdete v tématu Technické standardy Unicode č. 46: Zpracování kompatibility IDNA .

Tato IdnMapping.GetAscii metoda normalizuje název domény, převede normalizovaný název na reprezentaci, která se skládá ze zobrazených znaků Unicode v oblasti bodů kódu US-ASCII (U+0020 na U+007E) a předzálohuje předponu kódování kompatibilní s ASCII (ACE) (xn--) na každý popisek. Metoda IdnMapping.GetUnicode obnoví popisky názvu domény převedené metodou GetAscii .

Pokud řetězec, který chcete převést, obsahuje znaky oddělovače popisků IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) a HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), GetAscii metoda je převede na oddělovač popisků FULL STOP (tečka, U+002E). Metoda GetUnicode však neobnoví původní znak oddělovače popisků.

Konstruktory

Name Description
IdnMapping()

Inicializuje novou instanci IdnMapping třídy.

Vlastnosti

Name Description
AllowUnassigned

Získá nebo nastaví hodnotu, která určuje, zda jsou nepřiřazené kódové body Unicode používány v operacích prováděných členy aktuálního IdnMapping objektu.

UseStd3AsciiRules

Získá nebo nastaví hodnotu, která označuje, zda jsou standardní nebo uvolněné zásady pojmenování používány v operacích prováděných členy aktuálního IdnMapping objektu.

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt a aktuální IdnMapping objekt roven.

GetAscii(String, Int32, Int32)

Zakóduje zadaný počet znaků v podřetězdí popisků názvů domén, které obsahují znaky Unicode mimo rozsah znaků US-ASCII. Podřetězc je převeden na řetězec zobrazovaných znaků Unicode v oblasti znaků US-ASCII a je formátován podle standardu IDNA.

GetAscii(String, Int32)

Zakóduje podřetězdí popisků názvu domény, které obsahují znaky Unicode mimo rozsah znaků US-ASCII. Podřetězc je převeden na řetězec zobrazovaných znaků Unicode v oblasti znaků US-ASCII a je formátován podle standardu IDNA.

GetAscii(String)

Zakóduje řetězec popisků názvu domény, který se skládá ze znaků Unicode, na řetězec zobrazovaných znaků Unicode v oblasti znaků US-ASCII. Řetězec je naformátován podle standardu IDNA.

GetHashCode()

Vrátí kód hash pro tento IdnMapping objekt.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
GetUnicode(String, Int32, Int32)

Dekóduje podřetězce zadané délky, která obsahuje jeden nebo více popisků názvu domény kódované podle standardu IDNA, na řetězec znaků Unicode.

GetUnicode(String, Int32)

Dekóduje podřetězce jednoho nebo více popisků názvu domény kódované podle standardu IDNA na řetězec znaků Unicode.

GetUnicode(String)

Dekóduje řetězec jednoho nebo více popisků názvu domény zakódovaný podle standardu IDNA na řetězec znaků Unicode.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32)

Podporuje použití znaků jiných než ASCII pro názvy internetových domén. Tuto třídu nelze zdědit.

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

Podporuje použití znaků jiných než ASCII pro názvy internetových domén. Tuto třídu nelze zdědit.

Platí pro

Bezpečný přístup z více vláken

Všechny veřejné metody IdnMapping jsou bezpečné pro přístup z více vláken a mohou být použity souběžně z více vláken, pokud IdnMapping vlastnosti instance nejsou také nastaveny souběžně.

Viz také