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. 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:
- Při spuštění na Windows 8 podporuje verzi standardu IDNA 2008, kterou popisuje RFC 5891: Internationalized Domain Names in Applications (IDNA): Protocol.
- Při spuštění v dřívějších verzích operačního systému Windows podporuje verzi 2003 standardu nastíněnou dokumentem RFC 3490: Internationalizing Domain Names in Applications (IDNA) (Internationalizing Domain Names in Applications).
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.