Udostępnij za pośrednictwem


IdnMapping.GetAscii Metoda

Definicja

Koduje ciąg etykiet nazw domen, które zawierają znaki Unicode poza zakresem znaków US-ASCII do ciągu wyświetlanych znaków Unicode w zakresie znaków US-ASCII (U+0020 do U+007E). Ciąg jest formatowany zgodnie ze standardem IDNA.

Przeciążenia

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.

GetAscii(String)

Źródło:
IdnMapping.cs
Źródło:
IdnMapping.cs
Źródło:
IdnMapping.cs

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.

public:
 System::String ^ GetAscii(System::String ^ unicode);
public string GetAscii (string unicode);
member this.GetAscii : string -> string
Public Function GetAscii (unicode As String) As String

Parametry

unicode
String

Ciąg do konwersji, który składa się z co najmniej jednej etykiety nazw domen rozdzielonych separatorami etykiet.

Zwraca

Odpowiednik ciągu określonego unicode przez parametr, składający się z wyświetlanych znaków Unicode w zakresie znaków US-ASCII (U+0020 do U+007E) i sformatowany zgodnie ze standardem IDNA.

Wyjątki

unicode to null.

unicode jest nieprawidłowy na AllowUnassigned podstawie właściwości i UseStd3AsciiRules oraz standardu IDNA.

Przykłady

W poniższym przykładzie GetAscii(String) użyto metody , aby przekonwertować tablicę nazw domen międzynarodowych na punycode, która jest zakodowanym odpowiednikiem, który składa się z znaków w zakresie znaków US-ASCII. Następnie GetUnicode(String) 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

Parametr unicode określa ciąg co najmniej jednej etykiety składającej się z prawidłowych znaków Unicode. Etykiety są oddzielone separatorami etykiet. Parametr unicode nie może rozpoczynać się od separatora etykiet, ale może zawierać i opcjonalnie kończyć się separatorem. Separatory etykiet to FULL STOP (period, U+002E), IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) i HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61). Na przykład nazwa domeny "www.adatum.com" składa się z etykiet, "www", "adatum" i "com", oddzielonych kropkami.

Etykieta nie może zawierać żadnego z następujących znaków:

Metoda GetAscii konwertuje wszystkie separatory etykiet na FULL STOP (period, U+002E).

Jeśli unicode nie zawiera żadnych znaków poza zakresem znaków US-ASCII i żadne znaki w zakresie znaków US-ASCII nie są zabronione, metoda zwraca unicode niezmienione.

Uwagi dotyczące wywoływania

W .NET Framework 4.5 IdnMapping klasa obsługuje różne wersje standardu IDNA, w zależności od używanego systemu operacyjnego:

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.

Dotyczy

GetAscii(String, Int32)

Źródło:
IdnMapping.cs
Źródło:
IdnMapping.cs
Źródło:
IdnMapping.cs

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.

public:
 System::String ^ GetAscii(System::String ^ unicode, int index);
public string GetAscii (string unicode, int index);
member this.GetAscii : string * int -> string
Public Function GetAscii (unicode As String, index As Integer) As String

Parametry

unicode
String

Ciąg do konwersji, który składa się z co najmniej jednej etykiety nazw domen rozdzielonych separatorami etykiet.

index
Int32

Przesunięcie na podstawie zera, unicode które określa początek podciąg do konwersji. Operacja konwersji jest kontynuowana na końcu unicode ciągu.

Zwraca

Odpowiednik podciągów określony przez unicode parametry i index , składający się z wyświetlanych znaków Unicode w zakresie znaków US-ASCII (U+0020 do U+007E) i sformatowany zgodnie ze standardem IDNA.

Wyjątki

unicode to null.

Parametr index ma wartość niższą niż zero.

-lub-

indexjest większa niż długość .unicode

unicode jest nieprawidłowy na AllowUnassigned podstawie właściwości i UseStd3AsciiRules oraz standardu IDNA.

Uwagi

Parametry unicode i index definiują podciąg z co najmniej jedną etykietą składającą się z prawidłowych znaków Unicode. Etykiety są oddzielone separatorami etykiet. Pierwszy znak podciągów nie może rozpoczynać się od separatora etykiety, ale może zawierać i opcjonalnie kończyć się separatorem. Separatory etykiet to FULL STOP (period, U+002E), IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) i HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61). Na przykład nazwa domeny "www.adatum.com" składa się z etykiet, "www", "adatum" i "com", oddzielonych kropkami.

Etykieta nie może zawierać żadnego z następujących znaków:

Metoda GetAscii konwertuje wszystkie separatory etykiet na FULL STOP (period, U+002E).

Jeśli unicode nie zawiera żadnych znaków poza zakresem znaków US-ASCII i żadne znaki w zakresie znaków US-ASCII nie są zabronione, metoda zwraca unicode niezmienione.

Uwagi dotyczące wywoływania

W .NET Framework 4.5 IdnMapping klasa obsługuje różne wersje standardu IDNA, w zależności od używanego systemu operacyjnego:

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.

Dotyczy

GetAscii(String, Int32, Int32)

Źródło:
IdnMapping.cs
Źródło:
IdnMapping.cs
Źródło:
IdnMapping.cs

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.

public:
 System::String ^ GetAscii(System::String ^ unicode, int index, int count);
public string GetAscii (string unicode, int index, int count);
member this.GetAscii : string * int * int -> string
Public Function GetAscii (unicode As String, index As Integer, count As Integer) As String

Parametry

unicode
String

Ciąg do konwersji, który składa się z co najmniej jednej etykiety nazw domen rozdzielonych separatorami etykiet.

index
Int32

Przesunięcie na podstawie zera, unicode które określa początek podciąg.

count
Int32

Liczba znaków do przekonwertowania w podciąg, który rozpoczyna się od pozycji określonej przez index w unicode ciągu.

Zwraca

Odpowiednik podciągów określony przez unicodeparametry , indexi count składający się z wyświetlanych znaków Unicode w zakresie znaków US-ASCII (U+0020 do U+007E) i sformatowany zgodnie ze standardem IDNA.

Wyjątki

unicode to null.

index wartość lub count jest mniejsza niż zero.

-lub-

indexjest większa niż długość .unicode

-lub-

index jest większa niż długość unicode minus count.

unicode jest nieprawidłowy na AllowUnassigned podstawie właściwości i UseStd3AsciiRules oraz standardu IDNA.

Przykłady

W poniższym przykładzie użyto GetAscii(String, Int32, Int32) metody , aby przekonwertować międzynarodową nazwę domeny na nazwę domeny zgodną ze standardem IDNA. Następnie GetUnicode(String, Int32, Int32) metoda konwertuje ustandaryzowaną nazwę domeny z powrotem na oryginalną nazwę domeny, ale zastępuje oryginalne separatory etykiet standardowym separatorem etykiet.

// This example demonstrates the GetAscii and GetUnicode methods.
// For sake of illustration, this example uses the most complex
// form of those methods, not the most convenient.

using System;
using System.Globalization;

class Sample
{
    public static void Main()
    {
/*
   Define a domain name consisting of the labels: GREEK SMALL LETTER
   PI (U+03C0); IDEOGRAPHIC FULL STOP (U+3002); GREEK SMALL LETTER
   THETA (U+03B8); FULLWIDTH FULL STOP (U+FF0E); and "com".
*/
    string name = "\u03C0\u3002\u03B8\uFF0Ecom";
    string international;
    string nonInternational;

    string msg1 = "the original non-internationalized \ndomain name:";
    string msg2 = "Allow unassigned characters?:     {0}";
    string msg3 = "Use non-internationalized rules?: {0}";
    string msg4 = "Convert the non-internationalized domain name to international format...";
    string msg5 = "Display the encoded domain name:\n\"{0}\"";
    string msg6 = "the encoded domain name:";
    string msg7 = "Convert the internationalized domain name to non-international format...";
    string msg8 = "the reconstituted non-internationalized \ndomain name:";
    string msg9 = "Visually compare the code points of the reconstituted string to the " +
                  "original.\n" +
                  "Note that the reconstituted string contains standard label " +
                  "separators (U+002e).";
// ----------------------------------------------------------------------------
    CodePoints(name, msg1);
// ----------------------------------------------------------------------------

    IdnMapping idn = new IdnMapping();

    Console.WriteLine(msg2, idn.AllowUnassigned);
    Console.WriteLine(msg3, idn.UseStd3AsciiRules);
    Console.WriteLine();
// ----------------------------------------------------------------------------
    Console.WriteLine(msg4);
    international = idn.GetAscii(name, 0, name.Length);
    Console.WriteLine(msg5, international);
    Console.WriteLine();
    CodePoints(international, msg6);
// ----------------------------------------------------------------------------
    Console.WriteLine(msg7);
    nonInternational = idn.GetUnicode(international, 0, international.Length);
    CodePoints(nonInternational, msg8);
    Console.WriteLine(msg9);
    }
// ----------------------------------------------------------------------------
    static void CodePoints(string value, string title)
    {
    Console.WriteLine("Display the Unicode code points of {0}", title);
    foreach (char c in value)
        {
        Console.Write("{0:x4} ", Convert.ToInt32(c));
        }
        Console.WriteLine();
        Console.WriteLine();
    }
}
/*
This code example produces the following results:

Display the Unicode code points of the original non-internationalized
domain name:
03c0 3002 03b8 ff0e 0063 006f 006d

Allow unassigned characters?:     False
Use non-internationalized rules?: False

Convert the non-internationalized domain name to international format...
Display the encoded domain name:
"xn--1xa.xn--txa.com"

Display the Unicode code points of the encoded domain name:
0078 006e 002d 002d 0031 0078 0061 002e 0078 006e 002d 002d 0074 0078 0061 002e 0063 006f
006d

Convert the internationalized domain name to non-international format...
Display the Unicode code points of the reconstituted non-internationalized
domain name:
03c0 002e 03b8 002e 0063 006f 006d

Visually compare the code points of the reconstituted string to the original.
Note that the reconstituted string contains standard label separators (U+002e).

*/
' This example demonstrates the GetAscii and GetUnicode methods.
' For sake of illustration, this example uses the most complex
' form of those methods, not the most convenient.

Imports System.Globalization

Class Sample
    Public Shared Sub Main()

'   Define a domain name consisting of the labels: GREEK SMALL LETTER
'   PI (U+03C0); IDEOGRAPHIC FULL STOP (U+3002); GREEK SMALL LETTER
'   THETA (U+03B8); FULLWIDTH FULL STOP (U+FF0E); and "com".

        Dim name As String = "π。θ.com"
        Dim international As String
        Dim nonInternational As String

        Dim msg1 As String = "the original non-internationalized " & vbCrLf & "domain name:"
        Dim msg2 As String = "Allow unassigned characters?:     {0}"
        Dim msg3 As String = "Use non-internationalized rules?: {0}"
        Dim msg4 As String = "Convert the non-internationalized domain name to international format..."
        Dim msg5 As String = "Display the encoded domain name:" & vbCrLf & """{0}"""
        Dim msg6 As String = "the encoded domain name:"
        Dim msg7 As String = "Convert the internationalized domain name to non-international format..."
        Dim msg8 As String = "the reconstituted non-internationalized " & vbCrLf & "domain name:"
        Dim msg9 As String = "Visually compare the code points of the reconstituted string to the " & _
                             "original." & vbCrLf & _
                             "Note that the reconstituted string contains standard label " & _
                             "separators (U+002e)."
        ' ----------------------------------------------------------------------------
        CodePoints(name, msg1)
        ' ----------------------------------------------------------------------------
        Dim idn As New IdnMapping()

        Console.WriteLine(msg2, idn.AllowUnassigned)
        Console.WriteLine(msg3, idn.UseStd3AsciiRules)
        Console.WriteLine()
        ' ----------------------------------------------------------------------------
        Console.WriteLine(msg4)
        international = idn.GetAscii(name, 0, name.Length)
        Console.WriteLine(msg5, international)
        Console.WriteLine()
        CodePoints(international, msg6)
        ' ----------------------------------------------------------------------------
        Console.WriteLine(msg7)
        nonInternational = idn.GetUnicode(international, 0, international.Length)
        CodePoints(nonInternational, msg8)
        Console.WriteLine(msg9)
    End Sub

    ' ----------------------------------------------------------------------------
    Shared Sub CodePoints(ByVal value As String, ByVal title As String)
        Console.WriteLine("Display the Unicode code points of {0}", title)
        Dim c As Char
        For Each c In  value
            Console.Write("{0:x4} ", Convert.ToInt32(c))
        Next c
        Console.WriteLine()
        Console.WriteLine()

    End Sub
End Class
'
'This code example produces the following results:
'
'Display the Unicode code points of the original non-internationalized
'domain name:
'03c0 3002 03b8 ff0e 0063 006f 006d
'
'Allow unassigned characters?:     False
'Use non-internationalized rules?: False
'
'Convert the non-internationalized domain name to international format...
'Display the encoded domain name:
'"xn--1xa.xn--txa.com"
'
'Display the Unicode code points of the encoded domain name:
'0078 006e 002d 002d 0031 0078 0061 002e 0078 006e 002d 002d 0074 0078 0061 002e 0063 006f
'006d
'
'Convert the internationalized domain name to non-international format...
'Display the Unicode code points of the reconstituted non-internationalized
'domain name:
'03c0 002e 03b8 002e 0063 006f 006d
'
'Visually compare the code points of the reconstituted string to the original.
'Note that the reconstituted string contains standard label separators (U+002e).
'

Uwagi

Parametry Unicode, indexi count definiują podciąg z co najmniej jedną etykietą składającą się z prawidłowych znaków Unicode. Etykiety są oddzielone separatorami etykiet. Pierwszy znak podciągów nie może rozpoczynać się od separatora etykiety, ale może zawierać i opcjonalnie kończyć się separatorem. Separatory etykiet to FULL STOP (period, U+002E), IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) i HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61). Na przykład nazwa domeny "www.adatum.com" składa się z etykiet, "www", "adatum" i "com", oddzielonych kropkami.

Etykieta nie może zawierać żadnego z następujących znaków:

Metoda GetAscii konwertuje wszystkie separatory etykiet na FULL STOP (period, U+002E). Jeśli podciąg nie zawiera żadnych znaków poza zakresem znaków US-ASCII, a żadne znaki w zakresie znaków US-ASCII nie są zabronione, metoda zwraca podciąg bez zmian.

Uwagi dotyczące wywoływania

W .NET Framework 4.5 IdnMapping klasa obsługuje różne wersje standardu IDNA, w zależności od używanego systemu operacyjnego:

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.

Dotyczy