Leggere in inglese

Condividi tramite


Encoding.ASCII Proprietà

Definizione

Ottiene una codifica per il set di caratteri ASCII (7 bit).

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

Valore della proprietà

Codifica per il set di caratteri ASCII (a 7 bit).

Esempio

Nell'esempio seguente viene illustrato l'effetto della codifica ASCII sui caratteri che non rientrano nell'intervallo 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 (?).

*/

Commenti

I caratteri ASCII sono limitati ai caratteri Unicode 128 più bassi, da U + 0000 a U + 007F.

Quando si seleziona la codifica ASCII per l'app, tenere presente quanto segue:

  • La codifica ASCII è in genere appropriata per i protocolli che richiedono ASCII.

  • Se è necessaria la codifica a 8 bit (a volte denominata "ASCII"), la codifica UTF-8 è consigliata tramite la codifica ASCII. Per i caratteri 0-7F, i risultati sono identici, ma l'uso di UTF-8 evita la perdita di dati consentendo la rappresentazione di tutti i caratteri Unicode che possono essere rappresentati. Si noti che la codifica ASCII ha un'ambiguità a 8 bit che può consentire l'uso dannoso, ma la codifica UTF-8 rimuove l'ambiguità sull'ottavo bit.

  • Prima di .NET Framework versione 2,0, .NET Framework consentiva lo spoofing ignorando l'ottavo bit. A partire da .NET Framework 2,0, i punti di codice non ASCII eseguono il fallback durante la decodifica.

L' ASCIIEncoding oggetto restituito da questa proprietà potrebbe non avere il comportamento appropriato per l'app. Usa il fallback di sostituzione per sostituire ogni stringa che non può codificare e ogni byte che non può decodificare con un punto interrogativo ("?"). È invece possibile chiamare il GetEncoding(String, EncoderFallback, DecoderFallback) metodo per creare un'istanza di un ASCIIEncoding oggetto il cui fallback è EncoderFallbackException o DecoderFallbackException , come illustrato nell'esempio riportato di seguito.

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

Si applica a

Prodotto Versioni
.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, 10
.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

Vedi anche