IdnMapping Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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:
- Po uruchomieniu na Windows 8 obsługuje on wersję 2008 standardu IDNA określonego przez RFC 5891: Internationalized Domain Names in Applications (IDNA): Protocol(5891: Internationalized Domain Names in Applications).
- Po uruchomieniu we wcześniejszych wersjach systemu operacyjnego Windows obsługuje on wersję 2003 standardu opisanego przez RFC 3490: Internationalizing Domain Names in Applications (IDNA).
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.