Encoding.UTF8 Vlastnost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá kódování pro formát UTF-8.
public:
static property System::Text::Encoding ^ UTF8 { System::Text::Encoding ^ get(); };
public static System.Text.Encoding UTF8 { get; }
static member UTF8 : System.Text.Encoding
Public Shared ReadOnly Property UTF8 As Encoding
Hodnota vlastnosti
Kódování formátu UTF-8.
Příklady
Následující příklad definuje pole, které se skládá z následujících znaků:
MALÉ PÍSMENO LATINKY Z (U+007A)
MALÉ PÍSMENO LATINKY A (U+0061)
KOMBINACE BREVE (U+0306)
MALÉ PÍSMENO LATINKY AE S AKUTNÍ (U+01FD)
ŘECKÉ MALÉ PÍSMENO BETA (U+03B2)
Náhradní pár (U+D800 U+DD54), který tvoří ŘECKÝ ACROPHONIC ATTIC ONE THOUSAND STATERS (U+10154).
Zobrazí jednotky kódu UTF-16 jednotlivých znaků a určuje počet bajtů vyžadovaných kodérem UTF-8 pro kódování pole znaků. Potom zakóduje znaky a zobrazí výsledné bajty kódování 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
Poznámky
Tato vlastnost vrátí UTF8Encoding objekt, který kóduje znaky Unicode (kódování UTF-16) do sekvence jednoho až čtyř bajtů na znak a který dekóduje bajtové pole kódování UTF-8 na znaky Unicode (kódování UTF-16-16). Informace o kódování znaků podporovaných .NET a diskuzi o tom, které kódování Unicode použít, najdete v tématu Character Encoding in .NET.
Objekt UTF8Encoding vrácený touto vlastností nemusí mít odpovídající chování pro vaši aplikaci.
Vrátí UTF8Encoding objekt, který poskytuje znak pořadí bajtů Unicode (BOM). Chcete-li vytvořit instanci kódování UTF8, které neposkytuje BOM, zavolejte jakékoli přetížení konstruktoru UTF8Encoding .
Vrátí objekt, který používá náhradní náhradní náhradu UTF8Encoding k nahrazení každého řetězce, který nemůže kódovat, a každý bajt, který nemůže dekódovat znakem otazníku ("?"). Místo toho můžete volat UTF8Encoding.UTF8Encoding(Boolean, Boolean) konstruktor, který vytvoří instanci objektu UTF8Encoding , jehož náhradním objektem je buď nebo EncoderFallbackException a DecoderFallbackException, jak je znázorněno v následujícím příkladu.
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 2Imports 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