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í znaků jiných než ASCII pro názvy internetových domén. Tuto třídu nelze zdě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 název domény Punycode 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 standard Internationalizing Domain Names in Applications (IDNA) přijat v roce 2003, aby podporoval zahrnutí znaků Unicode mimo rozsah znaků US-ASCII. Názvové servery a překlad názvů domén ale 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.
Important
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í v systému Windows 8 podporuje verzi standardu IDNA 2008, která je popsána 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 standardu 2003, kterou popisuje RFC 3490: Internationalizing Domain Names in Applications (IDNA).
Informace o rozdílech 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 .
Tato IdnMapping.GetAscii metoda normalizuje název domény, převede normalizovaný název na reprezentaci, která se skládá ze zobrazených znaků Unicode v oblasti bodů kódu US-ASCII (U+0020 na U+007E) a předzálohuje předponu kódování kompatibilní s ASCII (ACE) (xn--) na každý popisek. Metoda IdnMapping.GetUnicode obnoví popisky názvu domény převedené metodou GetAscii .
Pokud řetězec, který chcete 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
| Name | Description |
|---|---|
| IdnMapping() |
Inicializuje novou instanci IdnMapping třídy. |
Vlastnosti
| Name | Description |
|---|---|
| AllowUnassigned |
Získá nebo nastaví hodnotu, která určuje, zda jsou nepřiřazené kódové body Unicode používány v operacích prováděných členy aktuálního IdnMapping objektu. |
| UseStd3AsciiRules |
Získá nebo nastaví hodnotu, která označuje, zda jsou standardní nebo uvolněné zásady pojmenování používány v operacích prováděných členy aktuálního IdnMapping objektu. |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt a aktuální IdnMapping objekt roven. |
| GetAscii(String, Int32, Int32) |
Zakóduje zadaný počet znaků v podřetězdí popisků názvů domén, které obsahují znaky Unicode mimo rozsah 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) |
Zakóduje podřetězdí popisků názvu domény, které obsahují znaky Unicode mimo rozsah 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) |
Zakóduje řetězec popisků názvu domény, který se skládá ze znaků Unicode, na řetězec zobrazovaných znaků Unicode v oblasti znaků US-ASCII. Řetězec je naformátován podle standardu IDNA. |
| GetHashCode() |
Vrátí kód hash pro tento IdnMapping objekt. |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| GetUnicode(String, Int32, Int32) |
Dekóduje podřetězce zadané délky, která obsahuje jeden nebo více popisků názvu domény kódované 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é podle standardu IDNA na řetězec znaků Unicode. |
| GetUnicode(String) |
Dekóduje řetězec jednoho nebo více popisků názvu domény zakódovaný podle standardu IDNA na řetězec znaků Unicode. |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |
| TryGetAscii(ReadOnlySpan<Char>, Span<Char>, Int32) |
Podporuje použití znaků jiných než ASCII pro názvy internetových domén. Tuto třídu nelze zdědit. |
| TryGetUnicode(ReadOnlySpan<Char>, Span<Char>, Int32) |
Podporuje použití znaků jiných než ASCII pro názvy internetových domén. Tuto třídu nelze zdědit. |
Platí pro
Bezpečný přístup z více vláken
Všechny veřejné metody IdnMapping jsou bezpečné pro přístup z více vláken a mohou být použity souběžně z více vláken, pokud IdnMapping vlastnosti instance nejsou také nastaveny souběžně.