IdnMapping.GetUnicode 方法

定义

对基于 IDNA 标准编码为 Unicode 字符串的一个或多个域名标签进行解码。Decodes one or more domain name labels encoded according to the IDNA standard to a string of Unicode characters.

重载

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.

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.

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

参数

ascii
String

要解码的字符串,包含根据 IDNA 标准在 US-ASCII 字符范围 (U+0020 至 U+007E) 编码的一个或多个标签。The string to decode, which consists of one or more labels in the US-ASCII character range (U+0020 to U+007E) encoded according to the IDNA standard.

返回

String

ascii 参数指定的 IDNA 子字符串的 Unicode 等效项。The Unicode equivalent of the IDNA substring specified by the ascii parameter.

例外

asciinullascii is null.

根据 AllowUnassignedUseStd3AsciiRules 属性以及 IDNA 标准,ascii 是无效的。ascii is invalid based on the AllowUnassigned and UseStd3AsciiRules properties, and the IDNA standard.

示例

下面的示例使用 GetAscii(String) 方法将国际化域名数组转换为 Punycode。The following example uses the GetAscii(String) method to convert an array of internationalized domain names to Punycode. GetUnicode(String)然后,方法将 Punycode 域名转换回原始域名,但将原始标签分隔符替换为标准标签分隔符。The GetUnicode(String) method then converts the Punycode domain name back into 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

注解

有关域名、标签和标签分隔符的详细信息,请参阅方法的备注 IdnMapping.GetAscii(String, Int32, Int32)For more information about domain names, labels, and label separators, see the remarks for the IdnMapping.GetAscii(String, Int32, Int32) method.

适用于

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.

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

参数

ascii
String

要解码的字符串,包含根据 IDNA 标准在 US-ASCII 字符范围 (U+0020 至 U+007E) 编码的一个或多个标签。The string to decode, which consists of one or more labels in the US-ASCII character range (U+0020 to U+007E) encoded according to the IDNA standard.

index
Int32

ascii 的从零开始的偏移量,用于指定开始解码的子字符串的位置。A zero-based offset into ascii that specifies the start of the substring to decode. 解码运算将继续执行到 ascii 字符串的末尾。The decoding operation continues to the end of the ascii string.

返回

String

asciiindex 参数指定的 IDNA 子字符串的 Unicode 等效项。The Unicode equivalent of the IDNA substring specified by the ascii and index parameters.

例外

asciinullascii is null.

index 小于零。index is less than zero.

- 或 --or- index 大于 ascii 的长度。index is greater than the length of ascii.

根据 AllowUnassignedUseStd3AsciiRules 属性以及 IDNA 标准,ascii 是无效的。ascii is invalid based on the AllowUnassigned and UseStd3AsciiRules properties, and the IDNA standard.

注解

有关域名、标签和标签分隔符的详细信息,请参阅方法的备注 IdnMapping.GetAscii(String, Int32, Int32)For more information about domain names, labels, and label separators, see the remarks for the IdnMapping.GetAscii(String, Int32, Int32) method.

适用于

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.

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

参数

ascii
String

要解码的字符串,包含根据 IDNA 标准在 US-ASCII 字符范围 (U+0020 至 U+007E) 编码的一个或多个标签。The string to decode, which consists of one or more labels in the US-ASCII character range (U+0020 to U+007E) encoded according to the IDNA standard.

index
Int32

ascii 的从零开始的偏移量,用于指定子字符串的起始位置。A zero-based offset into ascii that specifies the start of the substring.

count
Int32

要在 ascii 字符串中的 index 指定的位置开始的子字符串中转换的字符数。The number of characters to convert in the substring that starts at the position specified by index in the ascii string.

返回

String

asciiindexcount 参数指定的 IDNA 子字符串的 Unicode 等效项。The Unicode equivalent of the IDNA substring specified by the ascii, index, and count parameters.

例外

asciinullascii is null.

indexcount 小于零。index or count is less than zero.

- 或 --or- index 大于 ascii 的长度。index is greater than the length of ascii.

- 或 --or- index 大于 ascii 的长度减去 countindex is greater than the length of ascii minus count.

根据 AllowUnassignedUseStd3AsciiRules 属性以及 IDNA 标准,ascii 是无效的。ascii is invalid based on the AllowUnassigned and UseStd3AsciiRules properties, and the IDNA standard.

注解

有关域名、标签和标签分隔符的详细信息,请参阅方法的备注 IdnMapping.GetAscii(String, Int32, Int32)For more information about domain names, labels, and label separators, see the remarks for the IdnMapping.GetAscii(String, Int32, Int32) method.

适用于