IdnMapping クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
インターネットドメイン名での非 ASCII 文字の使用をサポートします。 このクラスは継承できません。
public ref class IdnMapping sealed
public sealed class IdnMapping
type IdnMapping = class
Public NotInheritable Class IdnMapping
- 継承
-
IdnMapping
例
次の例では、 メソッドを GetAscii(String, Int32, Int32) 使用して、国際化ドメイン名の配列を Punycode に変換します。 次に、 メソッドは GetUnicode 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
注釈
インターネット ドメイン名は、ドメイン名ラベルと呼ばれる 1 つ以上の部分で構成され、ラベル区切り記号で区切られます。 たとえば、ドメイン名 "www.proseware.com" は、"www"、"proseware"、"com" というラベルで構成され、ピリオドで区切られます。 標準ドメイン名は、U+0021 から U+007E までの US-ASCII (または基本ラテン) 文字範囲の指定された文字で構成されます。 US-ASCII 文字セットを使用しないカルチャでのインターネットの使用を容易にするために、2003 年には、US-ASCII 文字範囲外の Unicode 文字の包含をサポートするために、アプリケーション (IDNA) の国際化ドメイン名標準が採用されました。 ただし、ネーム サーバーとドメイン名解決は、引き続き US-ASCII 文字範囲内の文字に依存します。
IDNA メカニズムでは、Punycode を使用して、US-ASCII 文字範囲外の Unicode 文字を含む国際化ドメイン名を、ドメイン ネーム システムでサポートされている US-ASCII 文字範囲にマップします。 IDNA メカニズムは、インターネット経由で送信されるデータではなく、ドメイン名のみを変換するために使用されます。
重要
.NET Framework 4.5 では、IdnMapping使用しているオペレーティング システムに応じて、クラスでさまざまなバージョンの IDNA 標準がサポートされています。
- Windows 8で実行すると、RFC 5891: Internationalized Domain Names in Applications (IDNA): Protocol で概説されている 2008 バージョンの IDNA 標準がサポートされます。
- 以前のバージョンの Windows オペレーティング システムで実行すると、RFC 3490 で概説されている 2003 バージョンの標準がサポート されます。アプリケーションでのドメイン名の国際化 (IDNA) 。
これらの標準が特定の文字セットを処理する方法の違いについては、「 Unicode Technical Standard #46: IDNA 互換性処理 」を参照してください。
メソッドは IdnMapping.GetAscii ドメイン名を正規化し、正規化された名前を US-ASCII コード ポイント範囲 (U+0020 から U+007E) の表示可能な Unicode 文字で構成される表現に変換し、各ラベルに ASCII 互換エンコード (ACE) プレフィックス ("xn--") を付加します。 メソッドは IdnMapping.GetUnicode 、 メソッドによって変換されたドメイン名ラベルを GetAscii 復元します。
変換する文字列にラベル区切り文字 IDEOGRAPHIC FULL STOP (U+3002)、FULLWIDTH FULL STOP (U+FF0E)、HALFWIDTH IDEOGRAPHIC FULL STOP (U+FF61) GetAscii が含まれている場合、メソッドはラベル区切り記号 FULL STOP (ピリオド、U+002E) に変換します。 ただし、 メソッドは GetUnicode 元のラベル区切り文字を復元しません。
コンストラクター
IdnMapping() |
IdnMapping クラスの新しいインスタンスを初期化します。 |
プロパティ
AllowUnassigned |
未割り当ての Unicode コード ポイントが現在の IdnMapping オブジェクトのメンバーによって実行される操作内で使用されるかどうかを示す値を取得または設定します。 |
UseStd3AsciiRules |
標準または非標準の名前付け規則が、現在の IdnMapping オブジェクトのメンバーによって実行される操作内で使用されるかどうかを示す値を取得または設定します。 |
メソッド
Equals(Object) |
指定したオブジェクトが現在の IdnMapping オブジェクトと等しいかどうかを示します。 |
GetAscii(String) |
Unicode 文字から構成されるドメイン名ラベルの文字列を、US-ASCII 文字範囲の表示可能な Unicode 文字から構成される文字列にエンコードします。 文字列は IDNA 標準に従って書式設定されます。 |
GetAscii(String, Int32) |
US-ASCII 文字範囲外の Unicode 文字を含むドメイン名ラベルの部分文字列をエンコードします。 部分文字列は US-ASCII 文字範囲の表示可能な Unicode 文字の文字列に変換され、IDNA 基準に従って書式化されます。 |
GetAscii(String, Int32, Int32) |
US-ASCII 文字範囲外の Unicode 文字を含むドメイン名ラベルの部分文字列で、指定した文字数をエンコードします。 部分文字列は US-ASCII 文字範囲の表示可能な Unicode 文字の文字列に変換され、IDNA 基準に従って書式化されます。 |
GetHashCode() |
この IdnMapping オブジェクトのハッシュ コードを返します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
GetUnicode(String) |
IDNA 標準に従ってエンコードされた 1 つ以上のドメイン名ラベルの文字列を Unicode 文字の文字列にデコードします。 |
GetUnicode(String, Int32) |
IDNA 標準に従ってエンコードされた 1 つ以上のドメイン名ラベルの部分文字列を Unicode 文字の文字列にデコードします。 |
GetUnicode(String, Int32, Int32) |
IDNA 標準に従ってエンコードされた 1 つまたは複数のドメイン名ラベルの指定した長さの部分文字列を Unicode 文字の文字列にデコードします。 |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
スレッド セーフ
のすべてのパブリック メソッド IdnMapping はスレッド セーフであり、インスタンスのプロパティも同時に設定されていない限り IdnMapping 、複数のスレッドから同時に使用できます。
こちらもご覧ください
.NET