IdnMapping 類別

定義

支援在網際網路網域名稱中使用非 ASCII 字元。Supports the use of non-ASCII characters for Internet domain names. 無法繼承這個類別。This class cannot be inherited.

public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
繼承
IdnMapping

範例

下列範例會使用 GetAscii(String, Int32, Int32) 方法,將國際化功能變數名稱陣列轉換成 Punycode。The following example uses the GetAscii(String, Int32, Int32) method to convert an array of internationalized domain names to Punycode. GetUnicode 方法接著會將 Punycode 功能變數名稱轉換回原始功能變數名稱,但會以標準標籤分隔符號取代原始標籤分隔符號。The GetUnicode method then converts the Punycode domain name back to the original domain name, but replaces the original label separators with the standard label separator.

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 += String.Format("U+{0} ", Convert.ToUInt16(ch).ToString("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

備註

網際網路功能變數名稱是由一或多個稱為功能變數名稱標籤的元件所組成,並以標籤分隔符號分隔。An Internet domain name consists of one or more parts, called domain name labels, separated by label separators. 例如,功能變數名稱 "www.proseware.com" 是由標籤 "www"、"proseware" 和 "com" 所組成,並以句點分隔。For example, the domain name "www.proseware.com" consists of the labels, "www", "proseware", and "com", separated by periods. 標準功能變數名稱包含美國 ASCII (或基本拉丁)字元範圍中的指定字元,從 U + 0021 到 U + 007E。Standard domain names consist of designated characters in the US-ASCII (or Basic Latin) character range, from U+0021 to U+007E. 為了方便不使用美國 ASCII 字元集的文化特性使用網際網路,在2003中採用以應用程式(IDNA)標準進行的國際化功能變數名稱,以支援在美國 ASCII 字元範圍之外包含 Unicode 字元。To facilitate Internet usage in cultures that do not use the US-ASCII character set, the Internationalizing Domain Names in Applications (IDNA) standard was adopted in 2003 to support the inclusion of Unicode characters outside the US-ASCII character range. 不過,名稱伺服器和功能變數名稱解析會繼續依賴美國 ASCII 字元範圍內的字元。However, name servers and domain name resolution continue to rely on characters within the US-ASCII character range.

IDNA 機制會使用 Punycode 將包含美國 ASCII 字元範圍以外之 Unicode 字元的國際化功能變數名稱,對應到網域名稱系統所支援的美國 ASCII 字元範圍。The IDNA mechanism uses Punycode to map an internationalized domain name that contains Unicode characters outside the US-ASCII character range to the US-ASCII character range supported by the domain name system. IDNA 機制只會用來轉換功能變數名稱,而不是透過網際網路傳輸的資料。The IDNA mechanism is used to convert only domain names, not data transmitted over the Internet.

重要

.NET Framework 4.5.NET Framework 4.5中,IdnMapping 類別支援不同版本的 IDNA 標準,視使用中的作業系統而定:In the .NET Framework 4.5.NET Framework 4.5, the IdnMapping class supports different versions of the IDNA standard, depending on the operating system in use:

如需這些標準處理特定字元集的方式差異,請參閱Unicode 技術標準 #46: IDNA 相容性處理See Unicode Technical Standard #46: IDNA Compatibility Processing for the differences in the way these standards handle particular sets of characters.

IdnMapping.GetAscii 方法會標準化功能變數名稱,將正規化名稱轉換成標記法,其中包含美國 ASCII 代碼點範圍中可顯示的 Unicode 字元(U + 0020 到 U + 007E),並在每個標籤前面加上 ASCII 相容編碼(ACE)前置詞("xn--")。The IdnMapping.GetAscii method normalizes a domain name, converts the normalized name to a representation that consists of displayable Unicode characters in the US-ASCII code point range (U+0020 to U+007E), and prepends an ASCII-compatible encoding (ACE) prefix ("xn--") to each label. IdnMapping.GetUnicode 方法會還原由 GetAscii 方法轉換的功能變數名稱標籤。The IdnMapping.GetUnicode method restores the domain name labels converted by the GetAscii method.

如果要轉換的字串包含標籤分隔字元,即表示已滿停止(U + 3002)、全形的完整停止(U + FF0E)和半形表意字元 FULL STOP (U + FF61),GetAscii 方法會將它們轉換成標籤分隔符號 FULL STOP (period,U + 002E)。If the string to be converted includes the label separator characters IDEOGRAPHIC FULL STOP (U+3002), FULLWIDTH FULL STOP (U+FF0E), and HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61), the GetAscii method converts them to the label separator FULL STOP (period, U+002E). 不過,GetUnicode 方法不會還原原始的標籤分隔字元。The GetUnicode method, however, does not restore the original label separator character.

建構函式

IdnMapping()

初始化 IdnMapping 類別的新執行個體。Initializes a new instance of the IdnMapping class.

屬性

AllowUnassigned

取得或設定值,指出目前 IdnMapping 物件成員執行的作業中是否使用未指定的 Unicode 字碼指標。Gets or sets a value that indicates whether unassigned Unicode code points are used in operations performed by members of the current IdnMapping object.

UseStd3AsciiRules

取得或設定值,指出目前 IdnMapping 物件成員執行的作業中是否使用標準或寬鬆命名慣例。Gets or sets a value that indicates whether standard or relaxed naming conventions are used in operations performed by members of the current IdnMapping object.

方法

Equals(Object)

指出指定的物件和目前的 IdnMapping 物件是否相等。Indicates whether a specified object and the current IdnMapping object are equal.

GetAscii(String)

將網域名稱標籤的字串 (包含 Unicode 字元) 編碼為 US-ASCII 字元範圍中可顯示的 Unicode 字元字串。Encodes a string of domain name labels that consist of Unicode characters to a string of displayable Unicode characters in the US-ASCII character range. 此字串是依據 IDNA 標準來格式化。The string is formatted according to the IDNA standard.

GetAscii(String, Int32)

將包含 US-ASCII 字元範圍以外之 Unicode 字元的網域名稱標籤子字串編碼。Encodes a substring of domain name labels that include Unicode characters outside the US-ASCII character range. 子字串會轉換成 US-ASCII 字元範圍中可顯示的 Unicode 字元,並根據 IDNA 標準進行格式化。The substring is converted to a string of displayable Unicode characters in the US-ASCII character range and is formatted according to the IDNA standard.

GetAscii(String, Int32, Int32)

在包含 US-ASCII 字元範圍以外之 Unicode 字元的網域名稱標籤子字串中,將指定數目的字元編碼。Encodes the specified number of characters in a substring of domain name labels that include Unicode characters outside the US-ASCII character range. 子字串會轉換成 US-ASCII 字元範圍中可顯示的 Unicode 字元,並根據 IDNA 標準進行格式化。The substring is converted to a string of displayable Unicode characters in the US-ASCII character range and is formatted according to the IDNA standard.

GetHashCode()

傳回這個 IdnMapping 物件的雜湊程式碼。Returns a hash code for this IdnMapping object.

GetType()

取得目前執行個體的 TypeGets the Type of the current instance.

(繼承來源 Object)
GetUnicode(String)

將根據 IDNA 標準編碼的一個或多個網域名稱標籤字串解碼為 Unicode 字元字串。Decodes a string of one or more domain name labels, encoded according to the IDNA standard, to a string of Unicode characters.

GetUnicode(String, Int32)

將根據 IDNA 標準編碼的一個或多個網域名稱標籤子字串解碼為 Unicode 字元字串。Decodes a substring of one or more domain name labels, encoded according to the IDNA standard, to a string of Unicode characters.

GetUnicode(String, Int32, Int32)

將根據 IDNA 標準編碼的一個或多個網域名稱標籤的指定長度子字串,解碼為 Unicode 字元字串。Decodes a substring of a specified length that contains one or more domain name labels, encoded according to the IDNA standard, to a string of Unicode characters.

MemberwiseClone()

建立目前 Object 的淺層複本 (Shallow Copy)。Creates a shallow copy of the current Object.

(繼承來源 Object)
ToString()

傳回代表目前物件的字串。Returns a string that represents the current object.

(繼承來源 Object)

適用於

執行緒安全性

IdnMapping 的所有公用方法都是安全線程,而且可以從多個執行緒同時使用,只要 IdnMapping 實例的屬性也不會同時設定。All public methods of IdnMapping are thread-safe and may be used concurrently from multiple threads, as long as the IdnMapping instance's properties are not also set concurrently.

另請參閱