IdnMapping Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Stöder användning av icke-ASCII-tecken för Internetdomännamn. Det går inte att ärva den här klassen.
public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
- Arv
-
IdnMapping
Exempel
I följande exempel används GetAscii(String, Int32, Int32) metoden för att konvertera en matris med internationaliserade domännamn till Punycode. Metoden GetUnicode konverterar sedan punycode-domännamnet tillbaka till det ursprungliga domännamnet, men ersätter de ursprungliga etikettavgränsarna med standardetikettavgränsaren.
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
Kommentarer
Ett Internetdomännamn består av en eller flera delar, som kallas domännamnsetiketter, avgränsade med etikettavgränsare. Domännamnet "www.proseware.com" består till exempel av etiketterna "www", "proseware" och "com", avgränsade med punkter. Standarddomännamn består av angivna tecken i teckenintervallet US-ASCII (eller Basic Latin) från U+0021 till U+007E. För att underlätta Internetanvändning i kulturer som inte använder US-ASCII teckenuppsättningen antogs standarden Internationalizing Domain Names in Applications (IDNA) 2003 för att stödja införandet av Unicode-tecken utanför US-ASCII teckenintervall. Namnservrar och domännamnsmatchning fortsätter dock att förlita sig på tecken inom US-ASCII teckenintervall.
IDNA-mekanismen använder Punycode för att mappa ett internationaliserat domännamn som innehåller Unicode-tecken utanför US-ASCII teckenintervall till det US-ASCII teckenintervall som stöds av domännamnssystemet. IDNA-mekanismen används endast för att konvertera domännamn, inte data som överförs via Internet.
Important
I .NET Framework 4.5 stöder klassen IdnMapping olika versioner av IDNA-standarden, beroende på vilket operativsystem som används:
- När den körs på Windows 8 stöder den 2008-versionen av IDNA-standarden som beskrivs av RFC 5891: Internationaliserade domännamn i program (IDNA): Protocol.
- När den körs på tidigare versioner av Windows operativsystem stöder den 2003-versionen av standarden som beskrivs av RFC 3490: Internationalisera domännamn i program (IDNA).
Se Unicode Technical Standard #46: IDNA-kompatibilitetsbearbetning för skillnader i hur dessa standarder hanterar vissa uppsättningar tecken.
Metoden IdnMapping.GetAscii normaliserar ett domännamn, konverterar det normaliserade namnet till en representation som består av visningsbara Unicode-tecken i US-ASCII kodpunktsintervall (U+0020 till U+007E) och förbereder ett ASCII-kompatibelt kodningsprefix (ACE) ("xn--") till varje etikett. Metoden IdnMapping.GetUnicode återställer de domännamnsetiketter som konverterats med GetAscii metoden.
Om strängen som ska konverteras innehåller etikettavgränsarens tecken IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) och HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), GetAscii konverterar metoden dem till etikettavgränsaren FULL STOP (period, U+002E). Metoden GetUnicode återställer dock inte det ursprungliga etikettavgränsartecknet.
Konstruktorer
| Name | Description |
|---|---|
| IdnMapping() |
Initierar en ny instans av IdnMapping klassen. |
Egenskaper
| Name | Description |
|---|---|
| AllowUnassigned |
Hämtar eller anger ett värde som anger om otilldelade Unicode-kodpunkter används i åtgärder som utförs av medlemmar i det aktuella IdnMapping objektet. |
| UseStd3AsciiRules |
Hämtar eller anger ett värde som anger om standard- eller avslappnade namngivningskonventioner används i åtgärder som utförs av medlemmar i det aktuella IdnMapping objektet. |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Anger om ett angivet objekt och det aktuella IdnMapping objektet är lika. |
| GetAscii(String, Int32, Int32) |
Kodar det angivna antalet tecken i en delsträng med domännamnsetiketter som innehåller Unicode-tecken utanför US-ASCII teckenintervall. Delsträngen konverteras till en sträng med visningsbara Unicode-tecken i US-ASCII teckenintervall och formateras enligt IDNA-standarden. |
| GetAscii(String, Int32) |
Kodar en delsträng med domännamnsetiketter som innehåller Unicode-tecken utanför US-ASCII teckenintervall. Delsträngen konverteras till en sträng med visningsbara Unicode-tecken i US-ASCII teckenintervall och formateras enligt IDNA-standarden. |
| GetAscii(String) |
Kodar en sträng med domännamnsetiketter som består av Unicode-tecken till en sträng med visningsbara Unicode-tecken i US-ASCII teckenintervall. Strängen formateras enligt IDNA-standarden. |
| GetHashCode() |
Returnerar en hash-kod för det här IdnMapping objektet. |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| GetUnicode(String, Int32, Int32) |
Avkodar en delsträng av en angiven längd som innehåller en eller flera domännamnsetiketter, kodade enligt IDNA-standarden, till en sträng med Unicode-tecken. |
| GetUnicode(String, Int32) |
Avkodar en delsträng med en eller flera domännamnsetiketter, kodade enligt IDNA-standarden, till en sträng med Unicode-tecken. |
| GetUnicode(String) |
Avkodar en sträng med en eller flera domännamnsetiketter, kodade enligt IDNA-standarden, till en sträng med Unicode-tecken. |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
Gäller för
Trådsäkerhet
Alla offentliga metoder för IdnMapping är trådsäkra och kan användas samtidigt från flera trådar, så länge instansens IdnMapping egenskaper inte också anges samtidigt.