Encoding.ASCII Eigenschap

Definitie

Hiermee haalt u een codering op voor de ASCII-tekenset (7-bits).

public:
 static property System::Text::Encoding ^ ASCII { System::Text::Encoding ^ get(); };
public static System.Text.Encoding ASCII { get; }
static member ASCII : System.Text.Encoding
Public Shared ReadOnly Property ASCII As Encoding

Waarde van eigenschap

Een codering voor de ASCII-tekenset (7-bits).

Voorbeelden

In het volgende voorbeeld ziet u het effect van de ASCII-codering op tekens die buiten het ASCII-bereik vallen.

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 (?).

*/
Imports System.Text

Class EncodingExample
  Public Shared Sub Main()
      ' Create and ASCII encoding.
      Dim ascii As Encoding = Encoding.ASCII

      ' A Unicode string with two characters outside the ASCII code range.
      Dim unicodeString As String = "This unicode string contains two characters " + "with codes outside the ASCII code range, " + "Pi (" & ChrW(&H03A0) & ") and Sigma (" & ChrW(&H03A3) & ")."
      Console.WriteLine("Original string:")
      Console.WriteLine(unicodeString)

      ' Save the positions of the special characters for later reference.
      Dim indexOfPi As Integer = unicodeString.IndexOf(ChrW(&H03A0))
      Dim indexOfSigma As Integer = unicodeString.IndexOf(ChrW(&H03A3))

      ' Encode the string.
      Dim encodedBytes As Byte() = ascii.GetBytes(unicodeString)
      Console.WriteLine()
      Console.WriteLine("Encoded bytes:")
      For Each b In encodedBytes
          Console.Write("[{0}]", b)
      Next 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 Pi and Sigma characters.
      Dim decodedString As String = ascii.GetString(encodedBytes)
      Console.WriteLine()
      Console.WriteLine("Decoded bytes:")
      Console.WriteLine(decodedString)
  End Sub
End Class
'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 (?).
'

Opmerkingen

ASCII-tekens zijn beperkt tot de laagste 128 Unicode-tekens, van U+0000 tot U+007F.

Houd rekening met het volgende wanneer u de ASCII-codering voor uw app selecteert:

  • De ASCII-codering is meestal geschikt voor protocollen waarvoor ASCII is vereist.

  • Als u 8-bits codering nodig hebt (wat soms onjuist wordt aangeduid als 'ASCII'), wordt de UTF-8-codering aanbevolen via de ASCII-codering. Voor de tekens 0-7F zijn de resultaten identiek, maar het gebruik van UTF-8 voorkomt gegevensverlies door weergave van alle Unicode-tekens toe te staan die kunnen worden weergegeven. Houd er rekening mee dat de ASCII-codering een 8e bits dubbelzinnigheid heeft die schadelijk gebruik kan toestaan, maar de UTF-8-codering verwijdert dubbelzinnigheid over de 8e bit.

  • Vóór .NET Framework versie 2.0 heeft .NET Framework adresvervalsing toegestaan door de 8e bits te negeren. Vanaf .NET Framework 2.0 vallen niet-ASCII-codepunten terug tijdens het decoderen.

Het ASCIIEncoding object dat door deze eigenschap wordt geretourneerd, heeft mogelijk niet het juiste gedrag voor uw app. Er wordt gebruikgemaakt van vervangende terugval om elke tekenreeks te vervangen die niet kan worden gecodeerd en elke byte die het niet kan decoderen met een vraagteken ('?'). In plaats daarvan kunt u de GetEncoding(String, EncoderFallback, DecoderFallback) methode aanroepen om een ASCIIEncoding object te instantiëren waarvan de terugval een EncoderFallbackException of een DecoderFallbackExceptionis, zoals in het volgende voorbeeld wordt geïllustreerd.

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
Imports System.Text

Module Example
   Public Sub Main()
      Dim enc As Encoding = Encoding.GetEncoding("us-ascii", 
                                                 New EncoderExceptionFallback(),
                                                 New DecoderExceptionFallback())
      Dim value As String = String.Format("{0} {1} {2}", 
                            ChrW(&h00C4), ChrW(&h00F6), ChrW(&h00AE))
      
      Try
         Dim bytes() As Byte = enc.GetBytes(value)
         For Each byt As Byte In bytes
            Console.Write("{0:X2} ", byt)
         Next       
         Console.WriteLine()
         Dim value2 As String = enc.GetString(bytes)
         Console.WriteLine(value2)
      Catch e As EncoderFallbackException
         Console.WriteLine("Unable to encode {0} at index {1}", 
                           If(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)
      End Try
   End Sub
End Module
' The example displays the following output:
'       Unable to encode U+00C4 at index 0

Van toepassing op

Zie ook