Bagikan melalui


IdnMapping Kelas

Definisi

Mendukung penggunaan karakter non-ASCII untuk nama domain Internet. Kelas ini tidak dapat diwariskan.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
Warisan
IdnMapping

Contoh

Contoh berikut menggunakan GetAscii(String, Int32, Int32) metode untuk mengonversi array nama domain internasional ke Punycode. Metode ini GetUnicode kemudian mengonversi nama domain Punycode kembali ke nama domain asli, tetapi mengganti pemisah label asli dengan pemisah label standar.

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

Keterangan

Nama domain Internet terdiri dari satu atau beberapa bagian, yang disebut label nama domain, dipisahkan oleh pemisah label. Misalnya, nama domain "www.proseware.com" terdiri dari label, "www", "proseware", dan "com", dipisahkan oleh titik. Nama domain standar terdiri dari karakter yang ditunjuk dalam rentang karakter US-ASCII (atau Dasar Latin), dari U+0021 hingga U+007E. Untuk memfasilitasi penggunaan Internet dalam budaya yang tidak menggunakan kumpulan karakter US-ASCII, standar Internationalisasi Nama Domain dalam Aplikasi (IDNA) diadopsi pada tahun 2003 untuk mendukung penyertaan karakter Unicode di luar rentang karakter AS-ASCII. Namun, server nama dan resolusi nama domain terus mengandalkan karakter dalam rentang karakter US-ASCII.

Mekanisme IDNA menggunakan Punycode untuk memetakan nama domain internasional yang berisi karakter Unicode di luar rentang karakter US-ASCII ke rentang karakter US-ASCII yang didukung oleh sistem nama domain. Mekanisme IDNA digunakan untuk mengonversi hanya nama domain, bukan data yang dikirimkan melalui Internet.

Penting

Dalam .NET Framework 4.5, IdnMapping kelas mendukung berbagai versi standar IDNA, tergantung pada sistem operasi yang digunakan:

Lihat Standar Teknis Unicode #46: Pemrosesan Kompatibilitas IDNA untuk perbedaan cara standar ini menangani set karakter tertentu.

Metode ini IdnMapping.GetAscii menormalkan nama domain, mengonversi nama yang dinormalisasi menjadi representasi yang terdiri dari karakter Unicode yang dapat ditampilkan dalam rentang titik kode AS-ASCII (U+0020 ke U+007E), dan menambahkan awalan pengodean yang kompatibel dengan ASCII (ACE) ("xn--") ke setiap label. Metode IdnMapping.GetUnicode memulihkan label nama domain yang dikonversi oleh GetAscii metode .

Jika string yang akan dikonversi menyertakan karakter pemisah label IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E), dan HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), GetAscii metode mengonversinya ke pemisah label FULL STOP (periode, U+002E). Namun, metode ini GetUnicode tidak memulihkan karakter pemisah label asli.

Konstruktor

IdnMapping()

Menginisialisasi instans baru kelas IdnMapping.

Properti

AllowUnassigned

Mendapatkan atau menetapkan nilai yang menunjukkan apakah titik kode Unicode yang tidak ditetapkan digunakan dalam operasi yang dilakukan oleh anggota objek saat ini IdnMapping .

UseStd3AsciiRules

Mendapatkan atau menetapkan nilai yang menunjukkan apakah konvensi penamaan standar atau santai digunakan dalam operasi yang dilakukan oleh anggota objek saat ini IdnMapping .

Metode

Equals(Object)

Menunjukkan apakah objek yang ditentukan dan objek saat ini IdnMapping sama.

GetAscii(String)

Mengodekan string label nama domain yang terdiri dari karakter Unicode ke string karakter Unicode yang dapat ditampilkan dalam rentang karakter US-ASCII. String diformat sesuai dengan standar IDNA.

GetAscii(String, Int32)

Mengodekan substring label nama domain yang menyertakan karakter Unicode di luar rentang karakter US-ASCII. Substring dikonversi ke string karakter Unicode yang dapat ditampilkan dalam rentang karakter US-ASCII dan diformat sesuai dengan standar IDNA.

GetAscii(String, Int32, Int32)

Mengodekan jumlah karakter yang ditentukan dalam substring label nama domain yang menyertakan karakter Unicode di luar rentang karakter AS-ASCII. Substring dikonversi ke string karakter Unicode yang dapat ditampilkan dalam rentang karakter US-ASCII dan diformat sesuai dengan standar IDNA.

GetHashCode()

Mengembalikan kode hash untuk objek ini IdnMapping .

GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
GetUnicode(String)

Mendekode string satu atau beberapa label nama domain, dikodekan sesuai dengan standar IDNA, ke string karakter Unicode.

GetUnicode(String, Int32)

Mendekode substring dari satu atau beberapa label nama domain, yang dikodekan sesuai dengan standar IDNA, ke string karakter Unicode.

GetUnicode(String, Int32, Int32)

Mendekode substring dengan panjang tertentu yang berisi satu atau beberapa label nama domain, dikodekan sesuai dengan standar IDNA, ke string karakter Unicode.

MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Keamanan Thread

Semua metode publik aman untuk utas IdnMapping dan dapat digunakan secara bersamaan dari beberapa utas, selama IdnMapping properti instans tidak juga diatur secara bersamaan.

Lihat juga