IdnMapping Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Podporuje použití jiných znaků než ASCII pro názvy internetových domén. Tuto třídu nelze 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 poté 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í, které se nazývají popisky názvu domény oddělené 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, byla v roce 2003 přijata standard Internationalizing Domain Names in Applications (IDNA), který podporuje zahrnutí znaků Unicode mimo rozsah znaků US-ASCII. Názvové servery a překlad názvů domén se 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 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.
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:
- Při spuštění na Windows 8 podporuje verzi standardu IDNA 2008, jak je popsáno v dokumentu RFC 5891: Internationalized Domain Names in Applications (IDNA): Protocol.
- Při spuštění ve starších verzích operačního systému Windows podporuje verzi 2003 standardu popsaného v dokumentu RFC 3490: Internationalizing Domain Names in Applications (IDNA).
Rozdíly ve způsobu, jakým tyto standardy zpracovávají určité sady znaků, najdete v článku Technický standard 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á z zobrazitelných znaků Unicode v rozsahu bodů kódu US-ASCII (U+0020 až U+007E) a předponu kódování kompatibilní s ASCII (ACE) ("xn--") ke každému popisku. Metoda IdnMapping.GetUnicode obnoví popisky názvu domény 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é body kódu Unicode jsou použity v operacích prováděných členy aktuálního IdnMapping objektu. |
UseStd3AsciiRules |
Získá nebo nastaví hodnotu, která označuje, zda standardní nebo uvolněné zásady vytváření názvů jsou použity v operacích prováděných členy aktuálního IdnMapping objektu. |
Metody
Equals(Object) |
Určuje, zda je zadaný objekt a aktuální IdnMapping objekt shodný. |
GetAscii(String) |
Zakóduje řetězec popisků názvu domény, které se skládají ze znaků Unicode, do řetězce zobrazovaných znaků Unicode v rozsahu znaků US-ASCII. Řetězec je formátován podle standardu IDNA. |
GetAscii(String, Int32) |
Zakóduje podřetězdce popisků názvu domény, které obsahují znaky Unicode mimo rozsah znaků US-ASCII. Podřetězce je převeden na řetězec zobrazovaných znaků Unicode v rozsahu 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 rozsah znaků US-ASCII. Podřetězce je převeden na řetězec zobrazovaných znaků Unicode v rozsahu znaků US-ASCII a je formátován podle standardu IDNA. |
GetHashCode() |
Vrátí kód hash pro tento IdnMapping objekt. |
GetType() |
Type Získá z aktuální instance. (Zděděno od Object) |
GetUnicode(String) |
Dekóduje řetězec jednoho nebo více popisků názvu domény kódovaných 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ých podle standardu IDNA na řetězec znaků Unicode. |
GetUnicode(String, Int32, Int32) |
Dekóduje podřetězce zadané délky, 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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro