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

注釈

インターネットドメイン名は、ドメイン名ラベルと呼ばれる1つ以上の部分で構成され、ラベル区切り記号で区切られます。An Internet domain name consists of one or more parts, called domain name labels, separated by label separators. たとえば、ドメイン名 "www.proseware.com" は、ピリオドで区切られたラベル "www"、""、および "com" で構成されます。For example, the domain name "www.proseware.com" consists of the labels, "www", "proseware", and "com", separated by periods. 標準ドメイン名は、U + 0021 から U + 007E までの、US-ASCII (または基本的なラテン) 文字範囲内の指定された文字で構成されます。Standard domain names consist of designated characters in the US-ASCII (or Basic Latin) character range, from U+0021 to U+007E. Us-ascii 文字セットを使用しないカルチャでのインターネットの使用を容易にするために、us-ascii 文字の範囲外の Unicode 文字のインクルードをサポートするために、アプリケーションの国際化ドメイン名 (IDNA) 標準が2003で採用されています。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. ただし、ネームサーバーとドメイン名解決は、引き続き US-ASCII 文字範囲内の文字に依存します。However, name servers and domain name resolution continue to rely on characters within the US-ASCII character range.

IDNA メカニズムでは、Punycode を使用して、US-ASCII 文字範囲外の Unicode 文字を含む国際化ドメイン名を、ドメインネームシステムでサポートされている US-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.

重要

では、使用IdnMappingされているオペレーティングシステムに応じて、クラスは idna 標準のさまざまなバージョンをサポートしています。 .NET Framework 4.5.NET Framework 4.5In 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 Technical Standard #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メソッドはドメイン名を正規化し、正規化された名前を、us-ascii コードポイント範囲 (u + 0020 から u + 007e) の表示可能な Unicode 文字で構成される表現に変換し、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)、全角 full stop (u + FF0E)、および半角表意文字の完全停止 (u + FF61) が含まれている場合GetAsciiは、メソッドによって、ラベルの区切り記号 (ピリオド、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

未割り当ての Unicode コード ポイントが現在の IdnMapping オブジェクトのメンバーによって実行される操作内で使用されるかどうかを示す値を取得または設定します。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()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(継承元 Object)
GetUnicode(String)

IDNA 標準に従ってエンコードされた 1 つ以上のドメイン名ラベルの文字列を 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 標準に従ってエンコードされた 1 つ以上のドメイン名ラベルの部分文字列を 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 標準に従ってエンコードされた 1 つまたは複数のドメイン名ラベルの指定した長さの部分文字列を 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 の簡易コピーを作成します。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.

こちらもご覧ください