Encoding.ASCII 屬性
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
取得 ASCII (7 位元) 字元集 (Character Set) 的編碼方式。
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
屬性值
ASCII (7 位) 字元集的編碼方式。
範例
下列範例示範 ASCII 編碼對 ASCII 範圍以外的字元的影響。
using namespace System;
using namespace System::Text;
using namespace System::Collections;
int main()
{
// Create an ASCII encoding.
Encoding^ ascii = Encoding::ASCII;
// A Unicode String* with two characters outside the ASCII code range.
String^ unicodeString = L"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( L'\u03a0' );
int indexOfSigma = unicodeString->IndexOf( L'\u03a3' );
// Encode the String*.
array<Byte>^encodedBytes = ascii->GetBytes( unicodeString );
Console::WriteLine();
Console::WriteLine( "Encoded bytes:" );
IEnumerator^ myEnum = encodedBytes->GetEnumerator();
while ( myEnum->MoveNext() )
{
Byte b = safe_cast<Byte>(myEnum->Current);
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 String*.
// Notice the missing 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 (?).
*/
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 (?).
'
備註
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 後援為 EncoderFallbackException 或 DecoderFallbackException 的物件,如下列範例所示。
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