Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

IdnMapping.UseStd3AsciiRules Property

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.

Namespace:  System.Globalization
Assembly:  mscorlib (in mscorlib.dll)
public bool UseStd3AsciiRules { get; set; }

Property Value

Type: System.Boolean
true if standard naming conventions are used in operations; otherwise, false.

Domain names that follow standard naming rules consist of a specific subset of characters in the US-ASCII character range. The characters are the letters A through Z, the digits 0 through 9, the hyphen (-) character (U+002D), and the period (.) character. The case of the characters is not significant. Relaxed naming conventions allow the use of a broader range of ASCII characters, including the space character (U+0020), the exclamation point character (U+0021), and the underbar character (U+005F). If UseStd3AsciiRules is true, only standard characters can appear in a label returned by the GetAscii method.

By default, the value of the UseStd3AsciiRules property is false, and an expanded subset of ASCII characters is permitted in a label.


The IdnMapping class prohibits the use of the nondisplayable characters U+0000 through U+001F, and U+007F in domain name labels regardless of the setting of the UseStd3AsciiRules property. This prohibition reduces the risk of security attacks such as name spoofing.

The following example generates URLs that contain characters in the ASCII range from U+0000 to U+007F and passes them to the GetAscii(String) method of two IdnMapping objects. One object has its UseStd3AsciiRules property set to true, and the other object has it set to false. The output displays the characters that are invalid when the UseStd3AsciiRules property is true but valid when it is false.

using System;
using System.Globalization;

public class Example
   public static void Main()
      int nFailed = 0;
      IdnMapping idnStd = new IdnMapping();
      idnStd.UseStd3AsciiRules = true;

      IdnMapping idnRelaxed = new IdnMapping();
      idnRelaxed.UseStd3AsciiRules = false;  // The default, but make it explicit. 

      for (int ctr = 0; ctr <= 0x7F; ctr++) { 
         string name = "Prose" + Convert.ToChar(ctr) + "ware.com";

         bool stdFailed = false;
         bool relaxedFailed = false;
         string punyCode = "";
         try {
            punyCode = idnStd.GetAscii(name);
         catch (ArgumentException) {
            stdFailed = true;

         try {
            punyCode = idnRelaxed.GetAscii(name);
         catch (ArgumentException) {
            relaxedFailed = true;

         if (relaxedFailed != stdFailed) {
            Console.Write("U+{0:X4}     ", ctr);
            if (nFailed % 5 == 0)
// The example displays the following output: 
//       U+0020     U+0021     U+0022     U+0023     U+0024 
//       U+0025     U+0026     U+0027     U+0028     U+0029 
//       U+002A     U+002B     U+002C     U+002F     U+003A 
//       U+003B     U+003C     U+003D     U+003E     U+003F 
//       U+0040     U+005B     U+005C     U+005D     U+005E 
//       U+005F     U+0060     U+007B     U+007C     U+007D 
//       U+007E

.NET Framework

Supported in: 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
© 2014 Microsoft. All rights reserved.