Encoding.UTF8 Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Получает кодировку для формата UTF-8.
public:
static property System::Text::Encoding ^ UTF8 { System::Text::Encoding ^ get(); };
public static System.Text.Encoding UTF8 { get; }
member this.UTF8 : System.Text.Encoding
Public Shared ReadOnly Property UTF8 As Encoding
Значение свойства
Кодировка для формата UTF-8.
Примеры
В следующем примере определяется массив, состоящий из следующих символов:
ЛАТИНСКАЯ СТРОЧНАЯ БУКВА Z (U + 007A)
ЛАТИНСКАЯ СТРОЧНАЯ БУКВА A (U + 0061)
ОБЪЕДИНЕНИЕ БРЕВЕ; (U + 0306)
ЛАТИНСКАЯ МАЛЕНЬКАЯ БУКВА AE С АКУТОМ (U + 01FD)
ГРЕЧЕСКАЯ СТРОЧНАЯ БУКВА BETA (U + 03B2)
Суррогатная пара (U + D800 U + DD54), которая Forms ГРЕЧЕСКая АКРОФОНИК ЧЕРДАКЕ 1000 STATs (U + 10154).
Он отображает единицы кода в кодировке UTF-16 каждого символа и определяет число байтов, необходимое кодировщику UTF-8 для кодирования массива символов. Затем он кодирует символы и отображает результирующие байты в кодировке UTF-8.
using System;
using System.Text;
public class Example
{
public static void Main()
{
// Create a character array.
string gkNumber = Char.ConvertFromUtf32(0x10154);
char[] chars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2',
gkNumber[0], gkNumber[1] };
// Get UTF-8 and UTF-16 encoders.
Encoding utf8 = Encoding.UTF8;
Encoding utf16 = Encoding.Unicode;
// Display the original characters' code units.
Console.WriteLine("Original UTF-16 code units:");
byte[] utf16Bytes = utf16.GetBytes(chars);
foreach (var utf16Byte in utf16Bytes)
Console.Write("{0:X2} ", utf16Byte);
Console.WriteLine();
// Display the number of bytes required to encode the array.
int reqBytes = utf8.GetByteCount(chars);
Console.WriteLine("\nExact number of bytes required: {0}",
reqBytes);
// Display the maximum byte count.
int maxBytes = utf8.GetMaxByteCount(chars.Length);
Console.WriteLine("Maximum number of bytes required: {0}\n",
maxBytes);
// Encode the array of chars.
byte[] utf8Bytes = utf8.GetBytes(chars);
// Display all the UTF-8-encoded bytes.
Console.WriteLine("UTF-8-encoded code units:");
foreach (var utf8Byte in utf8Bytes)
Console.Write("{0:X2} ", utf8Byte);
Console.WriteLine();
}
}
// The example displays the following output:
// Original UTF-16 code units:
// 7A 00 61 00 06 03 FD 01 B2 03 00 D8 54 DD
//
// Exact number of bytes required: 12
// Maximum number of bytes required: 24
//
// UTF-8-encoded code units:
// 7A 61 CC 86 C7 BD CE B2 F0 90 85 94
Imports System.Text
Public Module Example
Public Sub Main()
' Create a character array.
Dim gkNumber As String = Char.ConvertFromUtf32(&h10154)
Dim chars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD),
ChrW(&H03B2), gkNumber(0), gkNumber(1) }
' Get UTF-8 and UTF-16 encoders.
Dim utf8 As Encoding = Encoding.UTF8
Dim utf16 As Encoding = Encoding.Unicode
' Display the original characters' code units.
Console.WriteLine("Original UTF-16 code units:")
Dim utf16Bytes() As Byte = utf16.GetBytes(chars)
For Each utf16Byte In utf16Bytes
Console.Write("{0:X2} ", utf16Byte)
Next
Console.WriteLine()
Console.WriteLine()
' Display the number of bytes required to encode the array.
Dim reqBytes As Integer = utf8.GetByteCount(chars)
Console.WriteLine("Exact number of bytes required: {0}",
reqBytes)
' Display the maximum byte count.
Dim maxBytes As Integer = utf8.GetMaxByteCount(chars.Length)
Console.WriteLine("Maximum number of bytes required: {0}",
maxBytes)
Console.WriteLine()
' Encode the array of characters.
Dim utf8Bytes() As Byte = utf8.GetBytes(chars)
' Display all the UTF-8-encoded bytes.
Console.WriteLine("UTF-8-encoded code units:")
For Each utf8Byte In utf8Bytes
Console.Write("{0:X2} ", utf8Byte)
Next
Console.WriteLine()
End Sub
End Module
' The example displays the following output:
' Original UTF-16 code units:
' 7A 00 61 00 06 03 FD 01 B2 03 00 D8 54 DD
'
' Exact number of bytes required: 12
' Maximum number of bytes required: 24
'
' UTF-8-encoded code units:
' 7A 61 CC 86 C7 BD CE B2 F0 90 85 94
Комментарии
Это свойство возвращает UTF8Encoding объект, который кодирует символы в кодировке Юникод (UTF-16) в последовательность от одного до четырех байтов на символ и декодирует массив байтов в кодировке UTF-8 в символы Юникода (UTF-16-Encoded). Сведения о кодировках символов, поддерживаемых .NET, и обсуждении используемой кодировки Юникод см. в разделе Кодировка символов в .NET.
UTF8EncodingОбъект, возвращаемый этим свойством, может не иметь соответствующего поведения для приложения.
Он возвращает UTF8Encoding объект, который предоставляет метку порядка байтов Юникода (BOM). Чтобы создать экземпляр кодировки UTF8, которая не предоставляет СПЕЦИФИКАЦИю, вызовите любую перегрузку UTF8Encoding конструктора.
Он возвращает UTF8Encoding объект, который использует резервную замену, чтобы заменить каждую строку, которая не может быть закодирована, и каждый байт, который не может быть декодирован символом вопросительного знака ("?"). Вместо этого можно вызвать UTF8Encoding.UTF8Encoding(Boolean, Boolean) конструктор для создания экземпляра UTF8Encoding объекта, резерв которого является либо EncoderFallbackException или DecoderFallbackException , как показано в следующем примере.
using System; using System.Text; public class Example { public static void Main() { Encoding enc = new UTF8Encoding(true, true); string value = "\u00C4 \uD802\u0033 \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+D802 at index 2
Imports System.Text Module Example Public Sub Main() Dim enc As Encoding = New UTF8Encoding(True, True) Dim value As String = String.Format("{0} {1}{2} {3}", ChrW(&h00C4), ChrW(&hD802), ChrW(&h0033), 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+D802 at index 2