Encoding.ASCII Egenskap
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Hämtar en kodning för ASCII-teckenuppsättningen (7-bitars).
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
Egenskapsvärde
En kodning för ASCII-teckenuppsättningen (7-bitars).
Exempel
I följande exempel visas effekten av ASCII-kodningen på tecken som ligger utanför ASCII-intervallet.
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 (?).
'
Kommentarer
ASCII-tecken är begränsade till de lägsta 128 Unicode-tecknen, från U+0000 till U+007F.
När du väljer ASCII-kodningen för din app bör du tänka på följande:
ASCII-kodningen är vanligtvis lämplig för protokoll som kräver ASCII.
Om du behöver 8-bitars kodning (som ibland felaktigt kallas "ASCII" rekommenderas UTF-8-kodningen över ASCII-kodningen. För tecknen 0-7F är resultaten identiska, men användning av UTF-8 undviker dataförlust genom att tillåta representation av alla Unicode-tecken som kan representeras. Observera att ASCII-kodningen har en 8:e bitars tvetydighet som kan tillåta skadlig användning, men UTF-8-kodningen tar bort tvetydighet om den 8:e biten.
Före .NET Framework version 2.0 tillät .NET Framework förfalskning genom att ignorera den 8:e biten. Från och med .NET Framework 2.0 faller icke-ASCII-kodpunkter tillbaka under avkodningen.
Objektet ASCIIEncoding som returneras av den här egenskapen kanske inte har rätt beteende för din app. Den använder ersättningsåterställning för att ersätta varje sträng som den inte kan koda och varje byte som den inte kan avkoda med ett frågetecken ("?"). I stället kan du anropa GetEncoding(String, EncoderFallback, DecoderFallback) metoden för att instansiera ett ASCIIEncoding objekt vars återställning är antingen en EncoderFallbackException eller , DecoderFallbackExceptionvilket visas i följande exempel.
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