Поделиться через


ASCIIEncoding Класс

Определение

Представляет кодировку ASCII символов Юникода.

public ref class ASCIIEncoding : System::Text::Encoding
public class ASCIIEncoding : System.Text.Encoding
[System.Serializable]
public class ASCIIEncoding : System.Text.Encoding
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ASCIIEncoding : System.Text.Encoding
type ASCIIEncoding = class
    inherit Encoding
[<System.Serializable>]
type ASCIIEncoding = class
    inherit Encoding
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ASCIIEncoding = class
    inherit Encoding
Public Class ASCIIEncoding
Inherits Encoding
Наследование
ASCIIEncoding
Атрибуты

Примеры

В следующем примере показано, как кодировать символы Юникода в ASCII. Обратите внимание на потерю данных, которая происходит, когда приложение использует ASCIIEncoding для кодирования символов Юникода за пределами диапазона ASCII.

using namespace System;
using namespace System::Collections;
using namespace System::Text;
int main()
{
   
   // The encoding.
   ASCIIEncoding^ ascii = gcnew ASCIIEncoding;
   
   // 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 positions of the special characters for later reference.
   int indexOfPi = unicodeString->IndexOf( L'\u03a0' );
   int indexOfSigma = unicodeString->IndexOf( L'\u03a3' );
   
   // Encode 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( "->Item[ {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 missing Pi and Sigma characters.
   String^ decodedString = ascii->GetString( encodedBytes );
   Console::WriteLine();
   Console::WriteLine( "Decoded bytes:" );
   Console::WriteLine( decodedString );
}
// The example displays the following output:
//    Original string:
//    This Unicode string contains two characters with codes outside the ASCII code ra
//    nge, Pi (Π) and Sigma (Σ).
//
//    Encoded bytes:
//    [84][104][105][115][32][85][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][1
//    00][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][1
//    05][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 ra
//    nge, Pi (?) and Sigma (?).
using System;
using System.Text;

class ASCIIEncodingExample {
    public static void Main() {
        // The encoding.
        ASCIIEncoding ascii = new ASCIIEncoding();
        
        // 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 positions of the special characters for later reference.
        int indexOfPi = unicodeString.IndexOf('\u03a0');
        int indexOfSigma = unicodeString.IndexOf('\u03a3');

        // Encode 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 string.
        // Notice missing Pi and Sigma characters.
        String decodedString = ascii.GetString(encodedBytes);
        Console.WriteLine();
        Console.WriteLine("Decoded bytes:");
        Console.WriteLine(decodedString);
    }
}
// The example displays the following output:
//    Original string:
//    This Unicode string contains two characters with codes outside the ASCII code ra
//    nge, Pi (Π) and Sigma (Σ).
//
//    Encoded bytes:
//    [84][104][105][115][32][85][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][1
//    00][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][1
//    05][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 ra
//    nge, Pi (?) and Sigma (?).
Imports System.Text

Class ASCIIEncodingExample
    Public Shared Sub Main()
        ' The encoding.
        Dim ascii As New ASCIIEncoding()

        ' 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(928) & ") and Sigma (" & ChrW(931) & ")."
        Console.WriteLine("Original string:")
        Console.WriteLine(unicodeString)

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

        ' Encode string.
        Dim encodedBytes As Byte() = ascii.GetBytes(unicodeString)
        Console.WriteLine()
        Console.WriteLine("Encoded bytes:")
        Dim b As Byte
        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 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
' The example displays the following output:
'    Original string:
'    This Unicode string contains two characters with codes outside the ASCII code ra
'    nge, Pi (Π) and Sigma (Σ).
'
'    Encoded bytes:
'    [84][104][105][115][32][85][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][1
'    00][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][1
'    05][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 ra
'    nge, Pi (?) and Sigma (?).

Комментарии

Кодирование - это процесс преобразования набора символов Юникода в последовательность байтов. Декодирование — это процесс преобразования последовательности закодированных байтов в набор символов Юникода.

ASCIIEncoding соответствует кодовой странице Windows 20127. Так как ASCII является 7-разрядной кодировкой, символы ASCII ограничены самыми низкими 128 символами Юникода, от U+0000 до U+007F. При использовании кодировщика по умолчанию, возвращаемого свойством или ASCIIEncoding конструкторомEncoding.ASCII, символы за пределами этого диапазона заменяются вопросительным знаком (?) перед выполнением операции кодирования. ASCIIEncoding Так как класс поддерживает только ограниченный набор символов, UTF8Encodingклассы , UnicodeEncodingи UTF32Encoding лучше подходят для глобализованных приложений. Следующие рекомендации помогут вам решить, следует ли использовать ASCIIEncoding:

  • Для некоторых протоколов требуется ASCII или подмножество ASCII. В таких случаях кодировка ASCII подходит.

  • Если предполагается 8-битное кодирование, то ASCII, вероятно, не является правильным выбором. Вместо этого рекомендуется использовать UTF8 вместо ASCII. Для символов от U+0000 до U+007F результаты идентичны, но все символы Юникода можно представить в UTF-8, что позволяет избежать потери данных.

Внимание!

ASCIIEncoding не обеспечивает обнаружение ошибок. В целях безопасности следует использовать UTF8Encoding, UnicodeEncodingили UTF32Encoding и включить обнаружение ошибок.

GetByteCountМетод определяет, сколько байт приводит к кодированию набора символов Юникода, и GetBytes метод выполняет фактическую кодировку.

Аналогичным образом метод определяет, GetCharCount сколько символов приводит к декодированию последовательности байтов, а GetChars методы и GetString выполняют фактическое декодирование.

Обратите внимание, что конструктор по умолчанию ASCIIEncoding сам по себе может не иметь соответствующего поведения для приложения. Может потребоваться задать EncoderFallback для свойства EncoderExceptionFallback или DecoderFallback значение или DecoderExceptionFallback , чтобы предотвратить последовательности с 8-м набором битов. Настраиваемое поведение также может подходить для этих случаев.

Конструкторы

ASCIIEncoding()

Инициализирует новый экземпляр класса ASCIIEncoding.

Свойства

BodyName

При переопределении в производном классе получает имя текущей кодировки, которое может использоваться с тегами текста сообщения почтового агента.

(Унаследовано от Encoding)
CodePage

При переопределении в производном классе получает идентификатор кодовой страницы текущего объекта Encoding.

(Унаследовано от Encoding)
DecoderFallback

Возвращает или задает объект DecoderFallback для текущего объекта Encoding.

(Унаследовано от Encoding)
EncoderFallback

Возвращает или задает объект EncoderFallback для текущего объекта Encoding.

(Унаследовано от Encoding)
EncodingName

При переопределении в производном классе получает описание текущей кодировки, которое может быть прочитано пользователем.

(Унаследовано от Encoding)
HeaderName

При переопределении в производном классе получает имя текущей кодировки, которое может использоваться с тегами заголовка сообщения почтового агента.

(Унаследовано от Encoding)
IsBrowserDisplay

При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами браузера для отображения содержимого.

(Унаследовано от Encoding)
IsBrowserSave

При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами браузера для сохранения содержимого.

(Унаследовано от Encoding)
IsMailNewsDisplay

При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами электронной почты и новостей для отображения содержимого.

(Унаследовано от Encoding)
IsMailNewsSave

При переопределении в производном классе получает значение, указывающее, может ли текущая кодировка использоваться клиентами электронной почты и новостей для сохранения содержимого.

(Унаследовано от Encoding)
IsReadOnly

При переопределении в производном классе получает значение, указывающее, является ли текущая кодировка доступной только для чтения.

(Унаследовано от Encoding)
IsSingleByte

Получает значение, указывающее, используются ли в текущей кодировке однобайтовые кодовые точки.

IsSingleByte

При переопределении в производном классе получает значение, указывающее, используются ли в текущей кодировке однобайтовые кодовые точки.

(Унаследовано от Encoding)
Preamble

При переопределении в производном классе возвращает диапазон, содержащий последовательность байтов, задающую используемую кодировку.

(Унаследовано от Encoding)
WebName

При переопределении в производном классе получает для текущей кодировки имя, зарегистрированное в IANA (Internet Assigned Numbers Authority).

(Унаследовано от Encoding)
WindowsCodePage

При переопределении в производном классе получает кодовую страницу операционной системы Windows, наиболее точно соответствующую текущей кодировке.

(Унаследовано от Encoding)

Методы

Clone()

При переопределении в производном классе создается неполная копия текущего объекта Encoding.

(Унаследовано от Encoding)
Equals(Object)

Определяет, равен ли указанный объект Object текущему экземпляру.

(Унаследовано от Encoding)
GetByteCount(Char*, Int32)

Вычисляет число байтов, полученных при кодировании набора символов начиная с заданного указателя символа.

GetByteCount(Char*, Int32)

При переопределении в производном классе вычисляет количество байтов, полученных при кодировании набора символов, начиная с заданного указателя символа.

(Унаследовано от Encoding)
GetByteCount(Char[])

При переопределении в производном классе вычисляет количество байтов, полученных при кодировании всех символов из заданного массива символов.

(Унаследовано от Encoding)
GetByteCount(Char[], Int32, Int32)

Вычисляет число байтов, полученных при кодировании набора символов из указанного массива символов.

GetByteCount(ReadOnlySpan<Char>)

Вычисляет количество байтов, полученных при кодировании указанного диапазона символов.

GetByteCount(ReadOnlySpan<Char>)

При переопределении в производном классе вычисляет количество байтов, полученных при кодировании символов из заданного диапазона символов.

(Унаследовано от Encoding)
GetByteCount(String)

Вычисляет количество байтов, полученных при кодировании символов в заданном объекте String.

GetByteCount(String, Int32, Int32)

При переопределении в производном классе вычисляет количество байтов, полученных при кодировании набора символов из указанной строки.

(Унаследовано от Encoding)
GetBytes(Char*, Int32, Byte*, Int32)

Кодирует набор символов, начало которого задается указателем символа, в последовательность байтов, которые сохраняются начиная с заданного указателя байта.

GetBytes(Char*, Int32, Byte*, Int32)

При переопределении в производном классе кодирует набор символов, начало которого задается указателем символа, в последовательность байтов, которые сохраняются, начиная с заданного указателя байта.

(Унаследовано от Encoding)
GetBytes(Char[])

При переопределении в производном классе кодирует все символы из указанного массива символов в последовательность байтов.

(Унаследовано от Encoding)
GetBytes(Char[], Int32, Int32)

При переопределении в производном классе кодирует набор символов из указанного массива символов в последовательность байтов.

(Унаследовано от Encoding)
GetBytes(Char[], Int32, Int32, Byte[], Int32)

Кодирует набор символов из заданного массива символов в указанный массив байтов.

GetBytes(ReadOnlySpan<Char>, Span<Byte>)

Кодирует заданный диапазон символов в заданный диапазон байтов.

GetBytes(ReadOnlySpan<Char>, Span<Byte>)

При переопределении в производном классе кодирует в диапазон байтов набор символов из указанного диапазона только для чтения.

(Унаследовано от Encoding)
GetBytes(String)

При переопределении в производном классе кодирует все символы заданной строки в последовательность байтов.

(Унаследовано от Encoding)
GetBytes(String, Int32, Int32)

При переопределении в производном классе кодирует в массив байтов количество символов, заданных count в указанной строке, начиная с указанного index.

(Унаследовано от Encoding)
GetBytes(String, Int32, Int32, Byte[], Int32)

Кодирует набор символов из заданного объекта String в указанный массив байтов.

GetCharCount(Byte*, Int32)

Вычисляет количество символов, полученных при декодировании последовательности байтов начиная с заданного указателя байта.

GetCharCount(Byte*, Int32)

При переопределении в производном классе вычисляет количество символов, полученных при декодировании последовательности байтов, начало которой задается указателем байтов.

(Унаследовано от Encoding)
GetCharCount(Byte[])

При переопределении в производном классе вычисляет количество символов, полученных при декодировании всех байтов из заданного массива байтов.

(Унаследовано от Encoding)
GetCharCount(Byte[], Int32, Int32)

Вычисляет количество символов, полученных при декодировании последовательности байтов из заданного массива байтов.

GetCharCount(ReadOnlySpan<Byte>)

Вычисляет количество символов, полученных при декодировании заданного диапазона байтов.

GetCharCount(ReadOnlySpan<Byte>)

При переопределении в производном классе вычисляет количество символов, полученных при декодировании предоставленного диапазона байтов только для чтения.

(Унаследовано от Encoding)
GetChars(Byte*, Int32, Char*, Int32)

Декодирует последовательность байтов, начало которой задается указателем байта, в набор символов, которые сохраняются начиная с заданного указателя символа.

GetChars(Byte*, Int32, Char*, Int32)

При переопределении в производном классе декодирует последовательность байтов, которая начинается с заданного указателя байта, в набор символов, которые сохраняются, начиная с заданного указателя символа.

(Унаследовано от Encoding)
GetChars(Byte[])

При переопределении в производном классе декодирует все байты из указанного массива байтов в набор символов.

(Унаследовано от Encoding)
GetChars(Byte[], Int32, Int32)

При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в набор символов.

(Унаследовано от Encoding)
GetChars(Byte[], Int32, Int32, Char[], Int32)

Декодирует последовательность байтов из заданного массива байтов в указанный массив символов.

GetChars(ReadOnlySpan<Byte>, Span<Char>)

Декодирует заданный диапазон байтов в заданный диапазон символов.

GetChars(ReadOnlySpan<Byte>, Span<Char>)

При переопределении в производном классе декодирует все байты из диапазона байтов только для чтения в диапазон символов.

(Унаследовано от Encoding)
GetDecoder()

Получает декодер, преобразующий ASCII-закодированную последовательность байтов в последовательность символов Юникода.

GetDecoder()

При переопределении в производном классе получает декодер, который преобразует последовательность байтов в последовательность символов.

(Унаследовано от Encoding)
GetEncoder()

Получает кодировщик, преобразующий последовательность символов Юникода в ASCII-закодированную последовательность байтов.

GetEncoder()

При переопределении в производном классе получает кодировщик, который преобразует последовательность символов Юникода в закодированную последовательность байтов.

(Унаследовано от Encoding)
GetHashCode()

Возвращает хэш-код текущего экземпляра.

(Унаследовано от Encoding)
GetMaxByteCount(Int32)

Вычисляет максимальное количество байтов, полученных при кодировании заданного числа символов.

GetMaxCharCount(Int32)

Вычисляет максимальное количество символов, полученных при декодировании заданного числа байтов.

GetPreamble()

При переопределении в производном классе возвращает последовательность байтов, задающую используемую кодировку.

(Унаследовано от Encoding)
GetString(Byte*, Int32)

При переопределении в производном классе декодирует указанное количество байтов начиная с указанного адреса в строку.

(Унаследовано от Encoding)
GetString(Byte[])

Представляет кодировку ASCII символов Юникода.

GetString(Byte[])

При переопределении в производном классе декодирует все байты из указанного массива байтов в строку.

(Унаследовано от Encoding)
GetString(Byte[], Int32, Int32)

Декодирует диапазон байтов из массива байтов в строку.

GetString(ReadOnlySpan<Byte>)

При переопределении в производном классе декодирует все байты из указанного диапазона байтов в строку.

(Унаследовано от Encoding)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsAlwaysNormalized()

Получает значение, которое указывает, является ли текущая кодировка всегда нормализованной с использованием формы нормализации по умолчанию.

(Унаследовано от Encoding)
IsAlwaysNormalized(NormalizationForm)

При переопределении в производном классе получает значение, которое указывает, является ли текущая кодировка всегда нормализованной с использованием заданной по умолчанию формы нормализации.

(Унаследовано от Encoding)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TryGetBytes(ReadOnlySpan<Char>, Span<Byte>, Int32)

Кодирует в диапазон байтов набор символов из указанного диапазона только для чтения, если целевой объект достаточно велик.

TryGetBytes(ReadOnlySpan<Char>, Span<Byte>, Int32)

Кодирует в диапазон байтов набор символов из указанного диапазона только для чтения, если целевой объект достаточно велик.

(Унаследовано от Encoding)
TryGetChars(ReadOnlySpan<Byte>, Span<Char>, Int32)

Декодирует в диапазон символов набор байтов из указанного диапазона только для чтения, если назначение достаточно велико.

TryGetChars(ReadOnlySpan<Byte>, Span<Char>, Int32)

Декодирует в диапазон символов набор байтов из указанного диапазона только для чтения, если назначение достаточно велико.

(Унаследовано от Encoding)

Методы расширения

GetBytes(Encoding, ReadOnlySequence<Char>)

Кодирует указанный объект ReadOnlySequence<T> в массив Byte, используя указанную кодировку Encoding.

GetBytes(Encoding, ReadOnlySequence<Char>, IBufferWriter<Byte>)

Декодирует указанный объект ReadOnlySequence<T> в byte с использованием указанной кодировки Encoding и записывает результат в writer.

GetBytes(Encoding, ReadOnlySequence<Char>, Span<Byte>)

Кодирует указанный объект ReadOnlySequence<T> в byte с использованием указанной кодировки Encoding и выводит результат в bytes.

GetBytes(Encoding, ReadOnlySpan<Char>, IBufferWriter<Byte>)

Кодирует указанный объект ReadOnlySpan<T> в byte с использованием указанной кодировки Encoding и записывает результат в writer.

GetChars(Encoding, ReadOnlySequence<Byte>, IBufferWriter<Char>)

Декодирует указанный объект ReadOnlySequence<T> в char с использованием указанной кодировки Encoding и записывает результат в writer.

GetChars(Encoding, ReadOnlySequence<Byte>, Span<Char>)

Декодирует указанный объект ReadOnlySequence<T> в char с использованием указанной кодировки Encoding и выводит результат в chars.

GetChars(Encoding, ReadOnlySpan<Byte>, IBufferWriter<Char>)

Декодирует указанный объект ReadOnlySpan<T> в char с использованием указанной кодировки Encoding и записывает результат в writer.

GetString(Encoding, ReadOnlySequence<Byte>)

Декодирует указанный объект ReadOnlySequence<T> в String, используя указанную кодировку Encoding.

Применяется к

См. также раздел