Sdílet prostřednictvím


IdnMapping Třída

Definice

Podporuje použití jiných znaků než ASCII pro názvy internetových domén. Tato třída se nemůže dě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 punycode název domény 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 v roce 2003 přijat standard IDNA (Internationalizing Domain Names in Applications), který podporuje zahrnutí znaků Unicode mimo oblast znaků US-ASCII. Názvové servery a překlad názvů domén však 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 oblast znaků US-ASCII, na oblast znaků US-ASCII podporovanou systémem názvů domén. Mechanismus IDNA se používá k převodu pouze názvů domén, nikoli dat přenášených přes internet.

Důležité

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:

Rozdíly 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 .

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

Pokud řetězec, který se má 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

IdnMapping()

Inicializuje novou instanci IdnMapping třídy.

Vlastnosti

AllowUnassigned

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

UseStd3AsciiRules

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

Metody

Equals(Object)

Určuje, zda se zadaný objekt a aktuální IdnMapping objekt rovnají.

GetAscii(String)

Zakóduje řetězec popisků názvů domén, které se skládají ze znaků Unicode, do řetězce zobrazovaných znaků Unicode v oblasti znaků US-ASCII. Řetězec je formátován podle standardu IDNA.

GetAscii(String, Int32)

Zakóduje podřetězdce popisků názvů domén, které obsahují znaky Unicode mimo oblast 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, Int32)

Zakóduje zadaný počet znaků v podřetězdci popisků názvů domén, které obsahují znaky Unicode mimo oblast 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.

GetHashCode()

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

GetType()

Získá aktuální Type instanci.

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

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

GetUnicode(String, Int32)

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

GetUnicode(String, Int32, Int32)

Dekóduje podřetězc o zadané délce, který obsahuje jeden nebo více popisků názvů domén zakódovaných podle standardu IDNA, na řetězec znaků Unicode.

MemberwiseClone()

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

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

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

(Zděděno od Object)

Platí pro

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

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

Viz také