IdnMapping Sınıf

Tanım

İnternet etki alanı adları için ASCII olmayan karakterlerin kullanımını destekler. Bu sınıf devralınamaz.

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

Örnekler

Aşağıdaki örnek, uluslararasılaştırılmış etki alanı adları dizisini Punycode'a dönüştürmek için yöntemini kullanır GetAscii(String, Int32, Int32) . Yöntemi GetUnicode daha sonra Punycode etki alanı adını özgün etki alanı adına geri dönüştürür, ancak özgün etiket ayırıcılarını standart etiket ayırıcısıyla değiştirir.

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

Açıklamalar

İnternet etki alanı adı, etiket ayırıcılarıyla ayrılmış, etki alanı adı etiketleri olarak adlandırılan bir veya daha fazla bölümden oluşur. Örneğin, "www.proseware.com" etki alanı adı noktalarla ayrılmış "www", "proseware" ve "com" etiketlerinden oluşur. Standart etki alanı adları, U+0021 ile U+007E arasında ABD-ASCII (veya Temel Latin) karakter aralığında belirlenen karakterlerden oluşur. US-ASCII karakter kümesini kullanmayan kültürlerde İnternet kullanımını kolaylaştırmak için, Unicode karakterlerin US-ASCII karakter aralığının dışına eklenmesini desteklemek üzere 2003'te Uygulamalarda Etki Alanı Adlarını Uluslararasılaştırma (IDNA) standardı benimsenmiştir. Ancak, ad sunucuları ve etki alanı adı çözümlemesi ABD-ASCII karakter aralığındaki karakterlere güvenmeye devam ediyor.

IDNA mekanizması, US-ASCII karakter aralığının dışındaki Unicode karakterleri içeren uluslararası bir etki alanı adını etki alanı adı sistemi tarafından desteklenen US-ASCII karakter aralığıyla eşlemek için Punycode kullanır. IDNA mekanizması, İnternet üzerinden iletilen verileri değil, yalnızca etki alanı adlarını dönüştürmek için kullanılır.

Önemli

.NET Framework 4.5'te sınıfı, IdnMapping kullanımdaki işletim sistemine bağlı olarak IDNA standardının farklı sürümlerini destekler:

Bu standartların belirli karakter kümelerini işleme yöntemindeki farklar için bkz . Unicode Teknik Standart #46: IDNA Uyumluluk İşleme .

IdnMapping.GetAscii yöntemi bir etki alanı adını normalleştirir, normalleştirilmiş adı ABD-ASCII kod noktası aralığında görüntülenebilir Unicode karakterlerinden (U+0020-U+007E) oluşan bir gösterime dönüştürür ve her etikete ASCII uyumlu kodlama (ACE) ön eki ("xn--") ekler. yöntemi, IdnMapping.GetUnicode yöntemi tarafından GetAscii dönüştürülen etki alanı adı etiketlerini geri yükler.

Dönüştürülecek dize IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E) ve HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61) etiket ayırıcı karakterlerini içeriyorsa, GetAscii yöntem bunları etiket ayırıcıSı TAM STOP'a (nokta, U+002E) dönüştürür. GetUnicode Ancak yöntemi özgün etiket ayırıcı karakterini geri yüklemez.

Oluşturucular

IdnMapping()

IdnMapping sınıfının yeni bir örneğini başlatır.

Özellikler

AllowUnassigned

Atanmamış Unicode kod noktalarının geçerli IdnMapping nesnenin üyeleri tarafından gerçekleştirilen işlemlerde kullanılıp kullanılmadığını belirten bir değer alır veya ayarlar.

UseStd3AsciiRules

Geçerli IdnMapping nesnenin üyeleri tarafından gerçekleştirilen işlemlerde standart veya gevşek adlandırma kurallarının kullanılıp kullanılmadığını belirten bir değer alır veya ayarlar.

Yöntemler

Equals(Object)

Belirtilen nesneyle geçerli IdnMapping nesnenin eşit olup olmadığını gösterir.

GetAscii(String)

Unicode karakterlerinden oluşan bir etki alanı adı etiketleri dizesini US-ASCII karakter aralığında görüntülenebilir Unicode karakterlerinden oluşan bir dizeye kodlar. Dize, IDNA standardına göre biçimlendirilir.

GetAscii(String, Int32)

ABD-ASCII karakter aralığının dışında Unicode karakterler içeren etki alanı adı etiketlerinin alt dizesini kodlar. Alt dize, US-ASCII karakter aralığında görüntülenebilir Unicode karakter dizesine dönüştürülür ve IDNA standardına göre biçimlendirilir.

GetAscii(String, Int32, Int32)

ABD-ASCII karakter aralığının dışında Unicode karakterler içeren etki alanı adı etiketlerinin alt dizesinde belirtilen sayıda karakteri kodlar. Alt dize, US-ASCII karakter aralığında görüntülenebilir Unicode karakter dizesine dönüştürülür ve IDNA standardına göre biçimlendirilir.

GetHashCode()

Bu IdnMapping nesne için bir karma kodu döndürür.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
GetUnicode(String)

IDNA standardına göre kodlanmış bir veya daha fazla etki alanı adı etiketinin dizesini Unicode karakter dizesine çözer.

GetUnicode(String, Int32)

IdNA standardına göre kodlanmış bir veya daha fazla etki alanı adı etiketinin alt dizesini Unicode karakter dizesine çözer.

GetUnicode(String, Int32, Int32)

IdNA standardına göre kodlanmış bir veya daha fazla etki alanı adı etiketi içeren belirtilen uzunluktaki alt dizenin kodunu Unicode karakter dizesine çözer.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

İş Parçacığı Güvenliği

tüm genel yöntemleri IdnMapping iş parçacığı açısından güvenlidir ve örneğin özellikleri de eşzamanlı olarak ayarlanmadığı sürece IdnMapping birden çok iş parçacığından eşzamanlı olarak kullanılabilir.

Ayrıca bkz.