閱讀英文

共用方式為


Encoding.ASCII 屬性

定義

取得 ASCII (7 位元) 字元集 (Character Set) 的編碼方式。

public static System.Text.Encoding ASCII { get; }

屬性值

ASCII (7 位) 字元集的編碼方式。

範例

下列範例示範 ASCII 編碼對 ASCII 範圍以外的字元的影響。

using System;
using System.Text;

class EncodingExample 
{
  public static void Main() 
  {
      // Create an ASCII encoding.
      Encoding ascii = Encoding.ASCII;
  
      // A Unicode string with two characters outside the ASCII code range.
      String unicodeString =
          "This unicode string contains two characters " +
          "with codes outside the ASCII code range, " +
          "Pi (\u03a0) and Sigma (\u03a3).";
      Console.WriteLine("Original string:");
      Console.WriteLine(unicodeString);

      // Save the positions of the special characters for later reference.
      int indexOfPi = unicodeString.IndexOf('\u03a0');
      int indexOfSigma = unicodeString.IndexOf('\u03a3');

      // Encode the string.
      Byte[] encodedBytes = ascii.GetBytes(unicodeString);
      Console.WriteLine();
      Console.WriteLine("Encoded bytes:");
      foreach (Byte b in encodedBytes) 
      {
          Console.Write("[{0}]", b);
      }
      Console.WriteLine();
  
      // Notice that the special characters have been replaced with
      // the value 63, which is the ASCII character code for '?'.
      Console.WriteLine();
      Console.WriteLine(
          "Value at position of Pi character: {0}",
          encodedBytes[indexOfPi]
          );
      Console.WriteLine(
          "Value at position of Sigma character: {0}",
          encodedBytes[indexOfSigma]
          );

      // Decode bytes back to a string.
      // Notice missing the Pi and Sigma characters.
      String decodedString = ascii.GetString(encodedBytes);
      Console.WriteLine();
      Console.WriteLine("Decoded bytes:");
      Console.WriteLine(decodedString);
  }
}
/*
This code produces the following output.

Original string:
This unicode string contains two characters with codes outside the ASCII code range, Pi (Π) and Sigma (Σ).

Encoded bytes:
[84][104][105][115][32][117][110][105][99][111][100][101][32][115][116][114][105][110][103][32][99][111][110][116][97][105][110][115][32][116][119][111][32][99][104][97][114][97][99][116][101][114][115][32][119][105][116][104][32][99][111][100][101][115][32][111][117][116][115][105][100][101][32][116][104][101][32][65][83][67][73][73][32][99][111][100][101][32][114][97][110][103][101][44][32][80][105][32][40][63][41][32][97][110][100][32][83][105][103][109][97][32][40][63][41][46]

Value at position of Pi character: 63
Value at position of Sigma character: 63

Decoded bytes:
This unicode string contains two characters with codes outside the ASCII code range, Pi (?) and Sigma (?).

*/

備註

ASCII 字元限制為最低 128 Unicode 字元,從 U+0000 到 U+007F。

為您的應用程式選取 ASCII 編碼時,請考慮下列事項:

  • ASCII 編碼通常適用于需要 ASCII 的通訊協定。

  • 如果您需要 8 位編碼 (有時不正確地稱為「ASCII」) ,建議使用 UTF-8 編碼方式而非 ASCII 編碼。 對於字元 0-7F,結果完全相同,但使用 UTF-8 可允許表示所有可表示的 Unicode 字元,以避免資料遺失。 請注意,ASCII 編碼具有可允許惡意使用的第 8 位模棱兩可,但 UTF-8 編碼會移除第 8 位的模棱兩可。

  • 在 .NET Framework 2.0 版之前,.NET Framework忽略第 8 位來允許詐騙。 從 .NET Framework 2.0 開始,非 ASCII 字碼點會在解碼期間回復。

ASCIIEncoding這個屬性所傳回的物件可能沒有應用程式的適當行為。 它會使用取代後援來取代無法編碼的每個字串,以及無法以問號解碼的每個位元組 (「?) 字元。 相反地,您可以呼叫 GetEncoding(String, EncoderFallback, DecoderFallback) 方法來具現化 ASCIIEncoding 後援為 EncoderFallbackExceptionDecoderFallbackException 的物件,如下列範例所示。

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      Encoding enc = Encoding.GetEncoding("us-ascii", 
                                          new EncoderExceptionFallback(),
                                          new DecoderExceptionFallback());
      string value = "\u00C4 \u00F6 \u00AE"; 
      
      try {
         byte[] bytes= enc.GetBytes(value);
         foreach (var byt in bytes)
            Console.Write("{0:X2} ", byt);
         Console.WriteLine();

         string value2 = enc.GetString(bytes);
         Console.WriteLine(value2);
      }
      catch (EncoderFallbackException e) {
         Console.WriteLine("Unable to encode {0} at index {1}", 
                           e.IsUnknownSurrogate() ? 
                              String.Format("U+{0:X4} U+{1:X4}", 
                                            Convert.ToUInt16(e.CharUnknownHigh),
                                            Convert.ToUInt16(e.CharUnknownLow)) :
                              String.Format("U+{0:X4}", 
                                            Convert.ToUInt16(e.CharUnknown)),
                           e.Index);
      }
   }
}
// The example displays the following output:
//        Unable to encode U+00C4 at index 0

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

另請參閱