Udostępnij za pośrednictwem


IdnMapping Klasa

Definicja

Obsługuje używanie znaków innych niż ASCII dla nazw domen internetowych. Klasa ta nie może być dziedziczona.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Dziedziczenie
IdnMapping

Przykłady

W poniższym przykładzie użyto GetAscii(String, Int32, Int32) metody , aby przekonwertować tablicę nazw domen międzynarodowych na punycode. Następnie GetUnicode metoda konwertuje nazwę domeny Punycode z powrotem na oryginalną nazwę domeny, ale zastępuje oryginalne separatory etykiet standardowym separatorem etykiet.

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

Uwagi

Nazwa domeny internetowej składa się z co najmniej jednej części nazywanej etykietami nazw domen oddzielonych separatorami etykiet. Na przykład nazwa domeny "www.proseware.com" składa się z etykiet, "www", "proseware" i "com", oddzielonych kropkami. Standardowe nazwy domen składają się z wyznaczonych znaków w zakresie znaków US-ASCII (lub Basic Latin), od U+0021 do U+007E. Aby ułatwić korzystanie z Internetu w kulturach, które nie używają zestawu znaków US-ASCII, standard Internationalizing Domain Names in Applications (IDNA) został przyjęty w 2003 roku w celu obsługi włączenia znaków Unicode poza zakres znaków US-ASCII. Jednak serwery nazw i rozpoznawanie nazw domen nadal polegają na znakach w zakresie znaków US-ASCII.

Mechanizm IDNA używa punycode do mapowania międzynarodowej nazwy domeny, która zawiera znaki Unicode poza zakresem znaków US-ASCII do zakresu znaków US-ASCII obsługiwanego przez system nazw domen. Mechanizm IDNA służy do konwertowania tylko nazw domen, a nie danych przesyłanych przez Internet.

Ważne

W .NET Framework 4.5 IdnMapping klasa obsługuje różne wersje standardu IDNA, w zależności od używanego systemu operacyjnego:

Zobacz Unicode Technical Standard #46: Przetwarzanie zgodności IDNA , aby uzyskać różnice w sposobie obsługi określonych zestawów znaków przez te standardy.

Metoda IdnMapping.GetAscii normalizuje nazwę domeny, konwertuje znormalizowaną nazwę na reprezentację składającą się z wyświetlanych znaków Unicode w zakresie punktów kodu US-ASCII (U+0020 do U+007E) i poprzedza prefiks kodowania zgodnego z ASCII (ACE) ("xn---") do każdej etykiety. Metoda IdnMapping.GetUnicode przywraca etykiety nazw domen przekonwertowane przez metodę GetAscii .

Jeśli ciąg do konwersji zawiera znaki separatora etykiet IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) i HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), GetAscii metoda konwertuje je na separator etykiety FULL STOP (kropka, U+002E). Metoda GetUnicode nie przywraca jednak oryginalnego znaku separatora etykiet.

Konstruktory

IdnMapping()

Inicjuje nowe wystąpienie klasy IdnMapping.

Właściwości

AllowUnassigned

Pobiera lub ustawia wartość wskazującą, czy nieprzypisane punkty kodu Unicode są używane w operacjach wykonywanych przez elementy członkowskie bieżącego IdnMapping obiektu.

UseStd3AsciiRules

Pobiera lub ustawia wartość wskazującą, czy standardowe lub zrelaksowane konwencje nazewnictwa są używane w operacjach wykonywanych przez elementy członkowskie bieżącego IdnMapping obiektu.

Metody

Equals(Object)

Wskazuje, czy określony obiekt i bieżący IdnMapping obiekt są równe.

GetAscii(String)

Koduje ciąg etykiet nazw domen, które składają się ze znaków Unicode do ciągu wyświetlanych znaków Unicode w zakresie znaków US-ASCII. Ciąg jest formatowany zgodnie ze standardem IDNA.

GetAscii(String, Int32)

Koduje podciąg etykiet nazw domen, które zawierają znaki Unicode poza zakresem znaków US-ASCII. Podciąg jest konwertowany na ciąg wyświetlanych znaków Unicode w zakresie znaków US-ASCII i jest sformatowany zgodnie ze standardem IDNA.

GetAscii(String, Int32, Int32)

Koduje określoną liczbę znaków w podciągach etykiet nazw domen, które zawierają znaki Unicode poza zakresem znaków US-ASCII. Podciąg jest konwertowany na ciąg wyświetlanych znaków Unicode w zakresie znaków US-ASCII i jest sformatowany zgodnie ze standardem IDNA.

GetHashCode()

Zwraca kod skrótu dla tego IdnMapping obiektu.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
GetUnicode(String)

Dekoduje ciąg co najmniej jednej etykiety nazwy domeny zakodowany zgodnie ze standardem IDNA do ciągu znaków Unicode.

GetUnicode(String, Int32)

Dekoduje podciąg co najmniej jednej etykiety nazwy domeny zakodowanej zgodnie ze standardem IDNA do ciągu znaków Unicode.

GetUnicode(String, Int32, Int32)

Dekoduje podciąg o określonej długości, który zawiera co najmniej jedną etykietę nazwy domeny zakodowaną zgodnie ze standardem IDNA, do ciągu znaków Unicode.

MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Bezpieczeństwo wątkowe

Wszystkie publiczne metody IdnMapping są bezpieczne wątkowo i mogą być używane współbieżnie z wielu wątków, o ile IdnMapping właściwości wystąpienia nie są również ustawiane współbieżnie.

Zobacz też