IdnMapping.GetUnicode Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Декодирует одно или нескольких меток доменного имени, кодированных в соответствии со стандартом IDNA в строку символов Юникода.
Перегрузки
GetUnicode(String) |
Декодирует строку, состоящую из одной или нескольких меток доменного имени, в соответствии со стандартом IDNA в строку символов Юникода. |
GetUnicode(String, Int32) |
Декодирует подстроку, состоящую из одной или нескольких меток доменного имени, в соответствии со стандартом IDNA в строку символов Юникода. |
GetUnicode(String, Int32, Int32) |
Декодирует подстроку заданной длины, состоящую из одной или нескольких меток доменного имени, в соответствии со стандартом IDNA в строку символов Юникода. |
GetUnicode(String)
- Исходный код:
- IdnMapping.cs
- Исходный код:
- IdnMapping.cs
- Исходный код:
- IdnMapping.cs
Декодирует строку, состоящую из одной или нескольких меток доменного имени, в соответствии со стандартом IDNA в строку символов Юникода.
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
Строка для декодирования, состоящая из одной или нескольких меток в диапазоне символов US-ASCII (с U+0020 до U+007E), закодированных в соответствии со стандартом IDNA.
Возвращаемое значение
Эквивалент подстроки IDNA, указанной в параметре ascii
, в символах Юникода.
Исключения
ascii
имеет значение null
.
Параметр ascii
не является допустимым на основе свойств AllowUnassigned и UseStd3AsciiRules, а также стандарта IDNA,
Примеры
В следующем примере метод используется GetAscii(String) для преобразования массива международных доменных имен в Punycode. Затем GetUnicode(String) метод преобразует доменное имя Punycode обратно в исходное доменное имя, но заменяет исходные разделители меток стандартным разделителем меток.
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
Комментарии
Дополнительные сведения о доменных именах, метках и разделителях меток см. в примечаниях к методу IdnMapping.GetAscii(String, Int32, Int32) .
Применяется к
GetUnicode(String, Int32)
- Исходный код:
- IdnMapping.cs
- Исходный код:
- IdnMapping.cs
- Исходный код:
- IdnMapping.cs
Декодирует подстроку, состоящую из одной или нескольких меток доменного имени, в соответствии со стандартом IDNA в строку символов Юникода.
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
Строка для декодирования, состоящая из одной или нескольких меток в диапазоне символов US-ASCII (с U+0020 до U+007E), закодированных в соответствии со стандартом IDNA.
- index
- Int32
Нулевое смещение в ascii
, которое указывает на начало подстроки для декодирования. Процедура декодирования продолжается до окончания строки ascii
.
Возвращаемое значение
Эквивалент подстроки IDNA, указанной в параметрах ascii
и index
, в символах Юникода.
Исключения
ascii
имеет значение null
.
Значение параметра index
меньше нуля.
-или-
значение index
превышает длину параметра ascii
.
Параметр ascii
не является допустимым на основе свойств AllowUnassigned и UseStd3AsciiRules, а также стандарта IDNA,
Комментарии
Дополнительные сведения о доменных именах, метках и разделителях меток см. в примечаниях к методу IdnMapping.GetAscii(String, Int32, Int32) .
Применяется к
GetUnicode(String, Int32, Int32)
- Исходный код:
- IdnMapping.cs
- Исходный код:
- IdnMapping.cs
- Исходный код:
- IdnMapping.cs
Декодирует подстроку заданной длины, состоящую из одной или нескольких меток доменного имени, в соответствии со стандартом IDNA в строку символов Юникода.
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
Строка для декодирования, состоящая из одной или нескольких меток в диапазоне символов US-ASCII (с U+0020 до U+007E), закодированных в соответствии со стандартом IDNA.
- index
- Int32
Нулевое смещение в ascii
, которое указывает на начало подстроки.
- count
- Int32
Количество символов для преобразования в подстроку, которая начинается с места, указанного параметром index
в строке ascii
.
Возвращаемое значение
Эквивалент подстроки IDNA, указанной в параметрах ascii
, index
и count
, в символах Юникода.
Исключения
ascii
имеет значение null
.
Значение параметра index
или count
меньше нуля.
-или-
Значение index
превышает длину ascii
.
-или-
длина значения index
больше, чем длина ascii
минус count
.
Параметр ascii
не является допустимым на основе свойств AllowUnassigned и UseStd3AsciiRules, а также стандарта IDNA,
Комментарии
Дополнительные сведения о доменных именах, метках и разделителях меток см. в примечаниях к методу IdnMapping.GetAscii(String, Int32, Int32) .