この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

IdnMapping.GetAscii メソッド (String, Int32)

 

公開日: 2016年10月

ドメイン名ラベルを含む、US-ASCII 文字の範囲の Unicode 文字の部分文字列をエンコードします。 部分文字列は、US-ASCII 文字の範囲で表示可能な Unicode 文字の文字列に変換し、IDNA 標準に従って書式設定します。

名前空間:   System.Globalization
アセンブリ:  mscorlib (mscorlib.dll 内)

public string GetAscii(
	string unicode,
	int index
)

パラメーター

unicode
Type: System.String

ラベル区切り記号で区切られた 1 つまたは複数のドメイン名ラベルで構成される文字列に変換します。

index
Type: System.Int32

0 から始まるオフセット unicode に変換する部分文字列の先頭を指定します。 末尾にも変換操作を続行、 unicode 文字列。

戻り値

Type: System.String

指定された部分文字列のと同じ、 unicodeindex パラメーター、US ASCII で表示可能な Unicode 文字から成る文字範囲 (U + 0020 に U + 007E) および IDNA 標準に従って書式設定します。

Exception Condition
ArgumentNullException

unicodenull です。

ArgumentOutOfRangeException

index が 0 未満です。

または

index 長さより大きい unicodeします。

ArgumentException

unicode 無効なに基づいて、 AllowUnassignedUseStd3AsciiRules プロパティ、および IDNA 標準です。

unicodeindex パラメーターは有効な Unicode 文字から成る 1 つまたは複数のラベルが付いた部分文字列を定義します。 ラベルは、ラベル区切り記号で区切られます。 部分文字列の最初の文字がラベルの区切り文字で始めることはできません含むことができます必要に応じて、区切り記号で終了します。 ラベル区切り記号は完全に停止 (期間、002E)、表意文字の完全停止 (U + 3002)、全角完全停止 (U + FF0E) と半角表意文字完全停止 (U + FF61)。 たとえば、ドメイン名"www.adatum.com"は、ラベル、"www"、"adatum"および"com"、ピリオドで区切られたで構成されます。

ラベルは、次の文字を含めることはできません。

GetAscii メソッドは、すべてのラベルの区切り記号を完全に停止 (期間、002E) に変換します。

場合 unicode に US-ASCII 以外の文字が含まれていない文字の範囲や、US-ASCII 文字の範囲内で文字が禁止されている場合、メソッドが戻る unicode 変更されません。

呼び出し時の注意:

.NET Framework 4.5, 、 IdnMapping クラスが使用されているオペレーティング システムに応じて、IDNA 標準のさまざまなバージョンをサポートしています。

参照してください Unicode Technical Standard #46: IDNA Compatibility Processing 方法に違いはこれらの標準処理の文字のセットを特定します。

次の例では、ローカルの部分とを結果として得られるドメイン名の電子メール アドレス、およびパスから文字 @、 GetAscii(String, Int32) 、US-ASCII 文字の範囲内の文字で構成されているエンコードされた同等は、Punycode ドメイン名を作成する方法です。 GetUnicode(String, Int32, Int32) メソッドは、Punycode ドメイン名を元のドメイン名に変換しますが、元のラベルの区切り記号を標準のラベルの区切り記号に置き換えます。

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] names = { "johann_doe@bücher.com", "vi@мойдомен.рф", "ia@παράδειγμα.δοκιμή",
                         "webmaster@mycharity\u3002org",
                         "admin@prose\u0000ware.com", "john_doe@proseware..com", 
                         "jane_doe@a.org", "me@my_company.com" };
      IdnMapping idn = new IdnMapping();

      foreach (var thisName in names) {
         string name = thisName;
         try {
            int position = name.LastIndexOf("@");
            if (position >= 0) 
               name = name.Substring(position + 1);

            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

ユニバーサル Windows プラットフォーム
10 以降で使用可能
.NET Framework
2.0 以降で使用可能
トップに戻る
表示: