Encoding.GetString Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в производном классе декодирует последовательность байтов в строку.
Перегрузки
GetString(Byte[]) |
При переопределении в производном классе декодирует все байты из указанного массива байтов в строку. |
GetString(ReadOnlySpan<Byte>) |
При переопределении в производном классе декодирует все байты из указанного диапазона байтов в строку. |
GetString(Byte*, Int32) |
При переопределении в производном классе декодирует указанное количество байтов начиная с указанного адреса в строку. |
GetString(Byte[], Int32, Int32) |
При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в строку. |
GetString(Byte[])
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
При переопределении в производном классе декодирует все байты из указанного массива байтов в строку.
public:
virtual System::String ^ GetString(cli::array <System::Byte> ^ bytes);
public virtual string GetString (byte[] bytes);
abstract member GetString : byte[] -> string
override this.GetString : byte[] -> string
Public Overridable Function GetString (bytes As Byte()) As String
Параметры
- bytes
- Byte[]
Массив байтов, содержащий последовательность байтов, которую требуется декодировать.
Возвращаемое значение
Строка, содержащая результаты декодирования заданной последовательности байтов.
Исключения
Массив байтов содержит недопустимые точки кода Юникод.
bytes
имеет значение null
.
Произошел откат (см. сведения о кодировке символов в .NET)
- и -
Параметру DecoderFallback задается значение DecoderExceptionFallback.
Примеры
В следующем примере считывается строка в кодировке UTF-8 из двоичного файла, представленного FileStream объектом. Для файлов размером менее 2 048 байт он считывает содержимое всего файла в массив байтов и вызывает GetString(Byte[]) метод для выполнения декодирования. Для больших файлов он считывает 2 048 байт за раз в массив байтов, вызывает Decoder.GetCharCount(Byte[], Int32, Int32) метод, чтобы определить, сколько символов содержится в массиве, а затем вызывает Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) метод для выполнения декодирования.
using System;
using System.IO;
using System.Text;
public class Example
{
const int MAX_BUFFER_SIZE = 2048;
static Encoding enc8 = Encoding.UTF8;
public static void Main()
{
FileStream fStream = new FileStream(@".\Utf8Example.txt", FileMode.Open);
string contents = null;
// If file size is small, read in a single operation.
if (fStream.Length <= MAX_BUFFER_SIZE) {
Byte[] bytes = new Byte[fStream.Length];
fStream.Read(bytes, 0, bytes.Length);
contents = enc8.GetString(bytes);
}
// If file size exceeds buffer size, perform multiple reads.
else {
contents = ReadFromBuffer(fStream);
}
fStream.Close();
Console.WriteLine(contents);
}
private static string ReadFromBuffer(FileStream fStream)
{
Byte[] bytes = new Byte[MAX_BUFFER_SIZE];
string output = String.Empty;
Decoder decoder8 = enc8.GetDecoder();
while (fStream.Position < fStream.Length) {
int nBytes = fStream.Read(bytes, 0, bytes.Length);
int nChars = decoder8.GetCharCount(bytes, 0, nBytes);
char[] chars = new char[nChars];
nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0);
output += new String(chars, 0, nChars);
}
return output;
}
}
// The example displays the following output:
// This is a UTF-8-encoded file that contains primarily Latin text, although it
// does list the first twelve letters of the Russian (Cyrillic) alphabet:
//
// А б в г д е ё ж з и й к
//
// The goal is to save this file, then open and decode it as a binary stream.
Imports System.IO
Imports System.Text
Module Example
Const MAX_BUFFER_SIZE As Integer = 2048
Dim enc8 As Encoding = Encoding.UTF8
Public Sub Main()
Dim fStream As New FileStream(".\Utf8Example.txt", FileMode.Open)
Dim contents As String = Nothing
' If file size is small, read in a single operation.
If fStream.Length <= MAX_BUFFER_SIZE Then
Dim bytes(CInt(fStream.Length) - 1) As Byte
fStream.Read(bytes, 0, bytes.Length)
contents = enc8.GetString(bytes)
' If file size exceeds buffer size, perform multiple reads.
Else
contents = ReadFromBuffer(fStream)
End If
fStream.Close()
Console.WriteLine(contents)
End Sub
Private Function ReadFromBuffer(fStream As FileStream) As String
Dim bytes(MAX_BUFFER_SIZE) As Byte
Dim output As String = String.Empty
Dim decoder8 As Decoder = enc8.GetDecoder()
Do While fStream.Position < fStream.Length
Dim nBytes As Integer = fStream.Read(bytes, 0, bytes.Length)
Dim nChars As Integer = decoder8.GetCharCount(bytes, 0, nBytes)
Dim chars(nChars - 1) As Char
nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0)
output += New String(chars, 0, nChars)
Loop
Return output
End Function
End Module
' The example displays the following output:
' This is a UTF-8-encoded file that contains primarily Latin text, although it
' does list the first twelve letters of the Russian (Cyrillic) alphabet:
'
' ? ? ? ? ? ? ? ? ? ? ? ?
'
' The goal is to save this file, then open and decode it as a binary stream.
В примере используется следующий текст, который должен быть сохранен в файле в кодировке UTF-8 с именем Utf8Example.txt.
This is a UTF-8-encoded file that contains primarily Latin text, although it
does list the first twelve letters of the Russian (Cyrillic) alphabet:
А б в г д е ё ж з и й к
The goal is to save this file, then open and decode it as a binary stream.
Комментарии
Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder объект, возвращаемый GetDecoder методом производного класса.
Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.
Обратите внимание, что точное поведение GetString метода для конкретной Encoding реализации зависит от резервной стратегии, определенной для этого Encoding объекта. Дополнительные сведения см. в разделе "Выбор стратегии резервного использования" статьи Кодировка символов в .NET .
См. также раздел
Применяется к
GetString(ReadOnlySpan<Byte>)
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
При переопределении в производном классе декодирует все байты из указанного диапазона байтов в строку.
public:
System::String ^ GetString(ReadOnlySpan<System::Byte> bytes);
public string GetString (ReadOnlySpan<byte> bytes);
member this.GetString : ReadOnlySpan<byte> -> string
Public Function GetString (bytes As ReadOnlySpan(Of Byte)) As String
Параметры
- bytes
- ReadOnlySpan<Byte>
Диапазон байтов только для чтения для декодирования в строку в Юникоде.
Возвращаемое значение
Строка, содержащая декодированные байты из предоставленного диапазона, доступного только для чтения.
Комментарии
GetStringМетод предназначен для оптимизации производительности. Вместо создания управляемого массива байтов, а затем его декодирования, можно вызвать этот метод без создания каких-либо промежуточных объектов.
Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder объект, возвращаемый GetDecoder методом производного класса.
Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.
Обратите внимание, что точное поведение GetString метода для конкретной Encoding реализации зависит от резервной стратегии, определенной для этого Encoding объекта. Дополнительные сведения см. в разделе "Выбор стратегии резервного использования" статьи Кодировка символов в .NET .
Применяется к
GetString(Byte*, Int32)
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
Важно!
Этот API несовместим с CLS.
При переопределении в производном классе декодирует указанное количество байтов начиная с указанного адреса в строку.
public:
System::String ^ GetString(System::Byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public string GetString (byte* bytes, int byteCount);
[System.CLSCompliant(false)]
public string GetString (byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public string GetString (byte* bytes, int byteCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
member this.GetString : nativeptr<byte> * int -> string
[<System.CLSCompliant(false)>]
member this.GetString : nativeptr<byte> * int -> string
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
member this.GetString : nativeptr<byte> * int -> string
Параметры
- bytes
- Byte*
Указатель на массив байтов.
- byteCount
- Int32
Число байтов для декодирования.
Возвращаемое значение
Строка, содержащая результаты декодирования заданной последовательности байтов.
- Атрибуты
Исключения
bytes
является пустым указателем
Значение параметра byteCount
меньше нуля.
Произошел откат (полное объяснение см. в статье Кодировка символов в .NET)
- и -
Параметру DecoderFallback задается значение DecoderExceptionFallback.
Комментарии
GetStringМетод предназначен для оптимизации производительности при наличии собственного указателя на массив байтов. Вместо создания управляемого массива байтов, а затем его декодирования, можно вызвать этот метод без создания каких-либо промежуточных объектов.
Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder объект, возвращаемый GetDecoder методом производного класса.
Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.
Обратите внимание, что точное поведение GetString метода для конкретной Encoding реализации зависит от резервной стратегии, определенной для этого Encoding объекта. Дополнительные сведения см. в разделе "Выбор стратегии резервного использования" статьи Кодировка символов в .NET .
См. также раздел
Применяется к
GetString(Byte[], Int32, Int32)
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
- Исходный код:
- Encoding.cs
При переопределении в производном классе декодирует последовательность байтов из указанного массива байтов в строку.
public:
virtual System::String ^ GetString(cli::array <System::Byte> ^ bytes, int index, int count);
public virtual string GetString (byte[] bytes, int index, int count);
abstract member GetString : byte[] * int * int -> string
override this.GetString : byte[] * int * int -> string
Public Overridable Function GetString (bytes As Byte(), index As Integer, count As Integer) As String
Параметры
- bytes
- Byte[]
Массив байтов, содержащий последовательность байтов, которую требуется декодировать.
- index
- Int32
Индекс первого декодируемого байта.
- count
- Int32
Число байтов для декодирования.
Возвращаемое значение
Строка, содержащая результаты декодирования заданной последовательности байтов.
Исключения
Массив байтов содержит недопустимые точки кода Юникод.
bytes
имеет значение null
.
Значение параметра index
или count
меньше нуля.
-или-
Параметры index
и count
не указывают допустимый диапазон в bytes
.
Произошел откат (см. сведения о кодировке символов в .NET)
- и -
Параметру DecoderFallback задается значение DecoderExceptionFallback.
Примеры
В следующем примере считывается строка в кодировке UTF-8 из двоичного файла, представленного FileStream объектом. Для файлов размером менее 2 048 байт он считывает содержимое всего файла в массив байтов и вызывает GetString(Byte[], Int32, Int32) метод для выполнения декодирования. Для больших файлов он считывает 2 048 байт за раз в массив байтов, вызывает Decoder.GetCharCount(Byte[], Int32, Int32) метод, чтобы определить, сколько символов содержится в массиве, а затем вызывает Decoder.GetChars(Byte[], Int32, Int32, Char[], Int32) метод для выполнения декодирования.
using System;
using System.IO;
using System.Text;
public class Example
{
const int MAX_BUFFER_SIZE = 2048;
static Encoding enc8 = Encoding.UTF8;
static byte[] bytes = new byte[MAX_BUFFER_SIZE];
public static void Main()
{
FileStream fStream = new FileStream(@".\Utf8Example.txt", FileMode.Open);
string contents = null;
// If file size is small, read in a single operation.
if (fStream.Length <= MAX_BUFFER_SIZE) {
int bytesRead = fStream.Read(bytes, 0, bytes.Length);
contents = enc8.GetString(bytes, 0, bytesRead);
}
// If file size exceeds buffer size, perform multiple reads.
else {
contents = ReadFromBuffer(fStream);
}
fStream.Close();
Console.WriteLine(contents);
}
private static string ReadFromBuffer(FileStream fStream)
{
string output = String.Empty;
Decoder decoder8 = enc8.GetDecoder();
while (fStream.Position < fStream.Length) {
int nBytes = fStream.Read(bytes, 0, bytes.Length);
int nChars = decoder8.GetCharCount(bytes, 0, nBytes);
char[] chars = new char[nChars];
nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0);
output += new String(chars, 0, nChars);
}
return output;
}
}
// The example displays the following output:
// This is a UTF-8-encoded file that contains primarily Latin text, although it
// does list the first twelve letters of the Russian (Cyrillic) alphabet:
//
// А б в г д е ё ж з и й к
//
// The goal is to save this file, then open and decode it as a binary stream.
Imports System.IO
Imports System.Text
Module Example
Const MAX_BUFFER_SIZE As Integer = 2048
Dim enc8 As Encoding = Encoding.UTF8
Dim bytes(MAX_BUFFER_SIZE -1) As Byte
Public Sub Main()
Dim fStream As New FileStream(".\Utf8Example.txt", FileMode.Open)
Dim contents As String = Nothing
' If file size is small, read in a single operation.
If fStream.Length <= MAX_BUFFER_SIZE Then
Dim bytesRead As Integer = fStream.Read(bytes, 0, bytes.Length)
contents = enc8.GetString(bytes, 0, bytesRead)
' If file size exceeds buffer size, perform multiple reads.
Else
contents = ReadFromBuffer(fStream)
End If
fStream.Close()
Console.WriteLine(contents)
End Sub
Private Function ReadFromBuffer(fStream As FileStream) As String
Dim bytes(MAX_BUFFER_SIZE) As Byte
Dim output As String = String.Empty
Dim decoder8 As Decoder = enc8.GetDecoder()
Do While fStream.Position < fStream.Length
Dim nBytes As Integer = fStream.Read(bytes, 0, bytes.Length)
Dim nChars As Integer = decoder8.GetCharCount(bytes, 0, nBytes)
Dim chars(nChars - 1) As Char
nChars = decoder8.GetChars(bytes, 0, nBytes, chars, 0)
output += New String(chars, 0, nChars)
Loop
Return output
End Function
End Module
' The example displays the following output:
' This is a UTF-8-encoded file that contains primarily Latin text, although it
' does list the first twelve letters of the Russian (Cyrillic) alphabet:
'
' А б в г д е ё ж з и й к
'
' The goal is to save this file, then open and decode it as a binary stream.
В примере используется следующий текст, который должен быть сохранен в файле в кодировке UTF-8 с именем Utf8Example.txt.
This is a UTF-8-encoded file that contains primarily Latin text, although it
does list the first twelve letters of the Russian (Cyrillic) alphabet:
А б в г д е ё ж з и й к
The goal is to save this file, then open and decode it as a binary stream.
Комментарии
Если данные для преобразования доступны только в последовательных блоках (например, чтение данных из потока) или если объем данных настолько велик, что необходимо разделить на меньшие блоки, следует использовать Decoder или, Encoder предоставленный GetDecoder методом или GetEncoder методом, соответственно, для производного класса.
Encoding.GetCharsОбсуждение приемов и рекомендаций по декодированию см. в разделе "Примечания" справочного раздела.