Encoding.GetBytes Metoda
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í.
Při přepsání v odvozené třídě zakóduje sadu znaků do posloupnosti bajtů.
Přetížení
| Name | Description |
|---|---|
| GetBytes(Char[]) |
Při přepsání v odvozené třídě zakóduje všechny znaky v zadaném znakovém poli do posloupnosti bajtů. |
| GetBytes(String) |
Při přepsání v odvozené třídě zakóduje všechny znaky v zadaném řetězci do posloupnosti bajtů. |
| GetBytes(ReadOnlySpan<Char>, Span<Byte>) |
Při přepsání v odvozené třídě zakóduje do rozsahu bajtů sadu znaků ze zadaného rozsahu jen pro čtení. |
| GetBytes(Char[], Int32, Int32) |
Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného pole znaků do posloupnosti bajtů. |
| GetBytes(String, Int32, Int32) |
Při přepsání v odvozené třídě kóduje do pole bajtů počet znaků zadaný |
| GetBytes(Char*, Int32, Byte*, Int32) |
Při přepsání v odvozené třídě zakóduje sadu znaků začínající na zadaném znakovém ukazateli do posloupnosti bajtů, které jsou uloženy počínaje zadaným bajtovým ukazatelem. |
| GetBytes(Char[], Int32, Int32, Byte[], Int32) |
Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného pole znaků do zadané bajtové pole. |
| GetBytes(String, Int32, Int32, Byte[], Int32) |
Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného řetězce do zadaného pole bajtů. |
GetBytes(Char[])
Při přepsání v odvozené třídě zakóduje všechny znaky v zadaném znakovém poli do posloupnosti bajtů.
public:
virtual cli::array <System::Byte> ^ GetBytes(cli::array <char> ^ chars);
public virtual byte[] GetBytes(char[] chars);
abstract member GetBytes : char[] -> byte[]
override this.GetBytes : char[] -> byte[]
Public Overridable Function GetBytes (chars As Char()) As Byte()
Parametry
- chars
- Char[]
Pole znaků obsahující znaky, které se mají kódovat.
Návraty
Bajtové pole obsahující výsledky kódování zadané sady znaků.
Výjimky
chars je null.
Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).
a
EncoderFallback je nastaveno na EncoderExceptionFallback.
Příklady
Následující příklad určuje počet bajtů potřebných ke kódování pole znaků, kóduje znaky a zobrazí výsledné bajty.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
// Get different encodings.
Encoding u7 = Encoding.UTF7;
Encoding u8 = Encoding.UTF8;
Encoding u16LE = Encoding.Unicode;
Encoding u16BE = Encoding.BigEndianUnicode;
Encoding u32 = Encoding.UTF32;
// Encode the entire array, and print out the counts and the resulting bytes.
PrintCountsAndBytes( myChars, u7 );
PrintCountsAndBytes( myChars, u8 );
PrintCountsAndBytes( myChars, u16LE );
PrintCountsAndBytes( myChars, u16BE );
PrintCountsAndBytes( myChars, u32 );
}
public static void PrintCountsAndBytes( char[] chars, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( chars );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( chars.Length );
Console.Write( " {0,-3} :", iMBC );
// Encode the array of chars.
byte[] bytes = enc.GetBytes( chars );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF)}
' Get different encodings.
Dim u7 As Encoding = Encoding.UTF7
Dim u8 As Encoding = Encoding.UTF8
Dim u16LE As Encoding = Encoding.Unicode
Dim u16BE As Encoding = Encoding.BigEndianUnicode
Dim u32 As Encoding = Encoding.UTF32
' Encode the entire array, and print out the counts and the resulting bytes.
PrintCountsAndBytes(myChars, u7)
PrintCountsAndBytes(myChars, u8)
PrintCountsAndBytes(myChars, u16LE)
PrintCountsAndBytes(myChars, u16BE)
PrintCountsAndBytes(myChars, u32)
End Sub
Public Shared Sub PrintCountsAndBytes(chars() As Char, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(chars)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(chars.Length)
Console.Write(" {0,-3} :", iMBC)
' Encode the array of chars.
Dim bytes As Byte() = enc.GetBytes(chars)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
Poznámky
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste volat řetězcovou verzi GetBytes metody.
Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.
Viz také
Platí pro
GetBytes(String)
Při přepsání v odvozené třídě zakóduje všechny znaky v zadaném řetězci do posloupnosti bajtů.
public:
virtual cli::array <System::Byte> ^ GetBytes(System::String ^ s);
public virtual byte[] GetBytes(string s);
abstract member GetBytes : string -> byte[]
override this.GetBytes : string -> byte[]
Public Overridable Function GetBytes (s As String) As Byte()
Parametry
- s
- String
Řetězec obsahující znaky, které se mají zakódovat.
Návraty
Bajtové pole obsahující výsledky kódování zadané sady znaků.
Výjimky
s je null.
Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).
a
EncoderFallback je nastaveno na EncoderExceptionFallback.
Příklady
Následující příklad určuje počet bajtů potřebných ke kódování řetězce nebo rozsahu v řetězci, kóduje znaky a zobrazí výsledné bajty.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";
// Get different encodings.
Encoding u7 = Encoding.UTF7;
Encoding u8 = Encoding.UTF8;
Encoding u16LE = Encoding.Unicode;
Encoding u16BE = Encoding.BigEndianUnicode;
Encoding u32 = Encoding.UTF32;
// Encode the entire string, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the entire string:" );
PrintCountsAndBytes( myStr, u7 );
PrintCountsAndBytes( myStr, u8 );
PrintCountsAndBytes( myStr, u16LE );
PrintCountsAndBytes( myStr, u16BE );
PrintCountsAndBytes( myStr, u32 );
Console.WriteLine();
// Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the characters from index 4 through 6:" );
PrintCountsAndBytes( myStr, 4, 3, u7 );
PrintCountsAndBytes( myStr, 4, 3, u8 );
PrintCountsAndBytes( myStr, 4, 3, u16LE );
PrintCountsAndBytes( myStr, 4, 3, u16BE );
PrintCountsAndBytes( myStr, 4, 3, u32 );
}
public static void PrintCountsAndBytes( String s, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( s.Length );
Console.Write( " {0,-3} :", iMBC );
// Encode the entire string.
byte[] bytes = enc.GetBytes( s );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s.ToCharArray(), index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode a range of characters in the string.
byte[] bytes = new byte[iBC];
enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
Encoding the entire string:
System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)
' Get different encodings.
Dim u7 As Encoding = Encoding.UTF7
Dim u8 As Encoding = Encoding.UTF8
Dim u16LE As Encoding = Encoding.Unicode
Dim u16BE As Encoding = Encoding.BigEndianUnicode
Dim u32 As Encoding = Encoding.UTF32
' Encode the entire string, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the entire string:")
PrintCountsAndBytes(myStr, u7)
PrintCountsAndBytes(myStr, u8)
PrintCountsAndBytes(myStr, u16LE)
PrintCountsAndBytes(myStr, u16BE)
PrintCountsAndBytes(myStr, u32)
Console.WriteLine()
' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the characters from index 4 through 6:")
PrintCountsAndBytes(myStr, 4, 3, u7)
PrintCountsAndBytes(myStr, 4, 3, u8)
PrintCountsAndBytes(myStr, 4, 3, u16LE)
PrintCountsAndBytes(myStr, 4, 3, u16BE)
PrintCountsAndBytes(myStr, 4, 3, u32)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(s)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
Console.Write(" {0,-3} :", iMBC)
' Encode the entire string.
Dim bytes As Byte() = enc.GetBytes(s)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(s.ToCharArray(), index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode a range of characters in the string.
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
Dim bytes(iBC - 1) As Byte
enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'Encoding the entire string:
'System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Poznámky
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda Encoding.GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou GetBytesverzi .
Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.
Viz také
Platí pro
GetBytes(ReadOnlySpan<Char>, Span<Byte>)
Při přepsání v odvozené třídě zakóduje do rozsahu bajtů sadu znaků ze zadaného rozsahu jen pro čtení.
public:
virtual int GetBytes(ReadOnlySpan<char> chars, Span<System::Byte> bytes);
public virtual int GetBytes(ReadOnlySpan<char> chars, Span<byte> bytes);
abstract member GetBytes : ReadOnlySpan<char> * Span<byte> -> int
override this.GetBytes : ReadOnlySpan<char> * Span<byte> -> int
Public Overridable Function GetBytes (chars As ReadOnlySpan(Of Char), bytes As Span(Of Byte)) As Integer
Parametry
- chars
- ReadOnlySpan<Char>
Rozsah obsahující sadu znaků, které se mají kódovat.
Návraty
Počet zakódovaných bajtů
Poznámky
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda Encoding.GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou GetBytesverzi .
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.
Platí pro
GetBytes(Char[], Int32, Int32)
Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného pole znaků do posloupnosti bajtů.
public:
virtual cli::array <System::Byte> ^ GetBytes(cli::array <char> ^ chars, int index, int count);
public virtual byte[] GetBytes(char[] chars, int index, int count);
abstract member GetBytes : char[] * int * int -> byte[]
override this.GetBytes : char[] * int * int -> byte[]
Public Overridable Function GetBytes (chars As Char(), index As Integer, count As Integer) As Byte()
Parametry
- chars
- Char[]
Pole znaků obsahující sadu znaků, které se mají kódovat.
- index
- Int32
Index prvního znaku, který se má kódovat.
- count
- Int32
Počet znaků, které se mají zakódovat.
Návraty
Bajtové pole obsahující výsledky kódování zadané sady znaků.
Výjimky
chars je null.
index nebo count je menší než nula.
nebo
index a count neoznamujte platný rozsah v chars.
Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).
a
EncoderFallback je nastaveno na EncoderExceptionFallback.
Příklady
Následující příklad určuje počet bajtů potřebných ke kódování tří znaků z pole znaků, kóduje znaky a zobrazí výsledné bajty.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
// Get different encodings.
Encoding u7 = Encoding.UTF7;
Encoding u8 = Encoding.UTF8;
Encoding u16LE = Encoding.Unicode;
Encoding u16BE = Encoding.BigEndianUnicode;
Encoding u32 = Encoding.UTF32;
// Encode three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes( myChars, 4, 3, u7 );
PrintCountsAndBytes( myChars, 4, 3, u8 );
PrintCountsAndBytes( myChars, 4, 3, u16LE );
PrintCountsAndBytes( myChars, 4, 3, u16BE );
PrintCountsAndBytes( myChars, 4, 3, u32 );
}
public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( chars, index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode the array of chars.
byte[] bytes = enc.GetBytes( chars, index, count );
// The following is an alternative way to encode the array of chars:
// byte[] bytes = new byte[iBC];
// enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF) }
' Get different encodings.
Dim u7 As Encoding = Encoding.UTF7
Dim u8 As Encoding = Encoding.UTF8
Dim u16LE As Encoding = Encoding.Unicode
Dim u16BE As Encoding = Encoding.BigEndianUnicode
Dim u32 As Encoding = Encoding.UTF32
' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes(myChars, 4, 3, u7)
PrintCountsAndBytes(myChars, 4, 3, u8)
PrintCountsAndBytes(myChars, 4, 3, u16LE)
PrintCountsAndBytes(myChars, 4, 3, u16BE)
PrintCountsAndBytes(myChars, 4, 3, u32)
End Sub
Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(chars, index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode the array of chars.
Dim bytes As Byte() = enc.GetBytes(chars, index, count)
' The following is an alternative way to encode the array of chars:
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
' Dim bytes(iBC - 1) As Byte
' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Poznámky
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda Encoding.GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou GetBytesverzi .
Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.
Viz také
Platí pro
GetBytes(String, Int32, Int32)
Při přepsání v odvozené třídě kóduje do pole bajtů počet znaků zadaný count v zadaném řetězci počínaje zadaným indexřetězcem .
public:
cli::array <System::Byte> ^ GetBytes(System::String ^ s, int index, int count);
public byte[] GetBytes(string s, int index, int count);
member this.GetBytes : string * int * int -> byte[]
Public Function GetBytes (s As String, index As Integer, count As Integer) As Byte()
Parametry
- s
- String
Řetězec obsahující znaky, které se mají zakódovat.
- index
- Int32
Index uvnitř řetězce pro zahájení kódování.
- count
- Int32
Počet znaků, které se mají zakódovat.
Návraty
Bajtové pole obsahující výsledky kódování zadané sady znaků.
Příklady
Následující příklad určuje počet bajtů potřebných ke kódování řetězce nebo rozsahu v řetězci, kóduje znaky a zobrazí výsledné bajty.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";
// Get different encodings.
Encoding u7 = Encoding.UTF7;
Encoding u8 = Encoding.UTF8;
Encoding u16LE = Encoding.Unicode;
Encoding u16BE = Encoding.BigEndianUnicode;
Encoding u32 = Encoding.UTF32;
// Encode the entire string, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the entire string:" );
PrintCountsAndBytes( myStr, u7 );
PrintCountsAndBytes( myStr, u8 );
PrintCountsAndBytes( myStr, u16LE );
PrintCountsAndBytes( myStr, u16BE );
PrintCountsAndBytes( myStr, u32 );
Console.WriteLine();
// Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the characters from index 4 through 6:" );
PrintCountsAndBytes( myStr, 4, 3, u7 );
PrintCountsAndBytes( myStr, 4, 3, u8 );
PrintCountsAndBytes( myStr, 4, 3, u16LE );
PrintCountsAndBytes( myStr, 4, 3, u16BE );
PrintCountsAndBytes( myStr, 4, 3, u32 );
}
public static void PrintCountsAndBytes( String s, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( s.Length );
Console.Write( " {0,-3} :", iMBC );
// Encode the entire string.
byte[] bytes = enc.GetBytes( s );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s.ToCharArray(), index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode a range of characters in the string.
byte[] bytes = new byte[iBC];
enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
Encoding the entire string:
System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)
' Get different encodings.
Dim u7 As Encoding = Encoding.UTF7
Dim u8 As Encoding = Encoding.UTF8
Dim u16LE As Encoding = Encoding.Unicode
Dim u16BE As Encoding = Encoding.BigEndianUnicode
Dim u32 As Encoding = Encoding.UTF32
' Encode the entire string, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the entire string:")
PrintCountsAndBytes(myStr, u7)
PrintCountsAndBytes(myStr, u8)
PrintCountsAndBytes(myStr, u16LE)
PrintCountsAndBytes(myStr, u16BE)
PrintCountsAndBytes(myStr, u32)
Console.WriteLine()
' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the characters from index 4 through 6:")
PrintCountsAndBytes(myStr, 4, 3, u7)
PrintCountsAndBytes(myStr, 4, 3, u8)
PrintCountsAndBytes(myStr, 4, 3, u16LE)
PrintCountsAndBytes(myStr, 4, 3, u16BE)
PrintCountsAndBytes(myStr, 4, 3, u32)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(s)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
Console.Write(" {0,-3} :", iMBC)
' Encode the entire string.
Dim bytes As Byte() = enc.GetBytes(s)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(s.ToCharArray(), index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode a range of characters in the string.
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
Dim bytes(iBC - 1) As Byte
enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'Encoding the entire string:
'System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Poznámky
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda Encoding.GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou GetBytesverzi .
Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.
Platí pro
GetBytes(Char*, Int32, Byte*, Int32)
Důležité
Toto rozhraní API neodpovídá specifikaci CLS.
Při přepsání v odvozené třídě zakóduje sadu znaků začínající na zadaném znakovém ukazateli do posloupnosti bajtů, které jsou uloženy počínaje zadaným bajtovým ukazatelem.
public:
virtual int GetBytes(char* chars, int charCount, System::Byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetBytes(char* chars, int charCount, byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetBytes(char* chars, int charCount, byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetBytes(char* chars, int charCount, byte* bytes, int byteCount);
[System.CLSCompliant(false)]
public virtual int GetBytes(char* chars, int charCount, byte* bytes, int byteCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
abstract member GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
Parametry
- chars
- Char*
Ukazatel na první znak, který se má kódovat.
- charCount
- Int32
Počet znaků, které se mají zakódovat.
- bytes
- Byte*
Ukazatel na umístění, ve kterém chcete začít psát výslednou sekvenci bajtů.
- byteCount
- Int32
Maximální počet bajtů k zápisu.
Návraty
Skutečný počet bajtů zapsaných v umístění určeném parametrem bytes .
- Atributy
Výjimky
charCount nebo byteCount je menší než nula.
byteCount je menší než výsledný počet bajtů.
Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).
a
EncoderFallback je nastaveno na EncoderExceptionFallback.
Poznámky
Pokud chcete vypočítat přesnou velikost pole, která GetBytes vyžaduje uložení výsledných bajtů, zavolejte metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít Decoder objekt poskytovaný EncoderGetDecoder metodou nebo GetEncoder metodou odvozené třídy.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou GetBytesverzi .
Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.
Viz také
Platí pro
GetBytes(Char[], Int32, Int32, Byte[], Int32)
Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného pole znaků do zadané bajtové pole.
public:
abstract int GetBytes(cli::array <char> ^ chars, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public abstract int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex);
abstract member GetBytes : char[] * int * int * byte[] * int -> int
Public MustOverride Function GetBytes (chars As Char(), charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer
Parametry
- chars
- Char[]
Pole znaků obsahující sadu znaků, které se mají kódovat.
- charIndex
- Int32
Index prvního znaku, který se má kódovat.
- charCount
- Int32
Počet znaků, které se mají zakódovat.
- bytes
- Byte[]
Bajtové pole, které bude obsahovat výslednou sekvenci bajtů.
- byteIndex
- Int32
Index, na kterém chcete začít psát výslednou sekvenci bajtů.
Návraty
Skutečný počet bajtů zapsaných do bytes.
Výjimky
charIndex nebo charCountbyteIndex je menší než nula.
nebo
charIndex a charCount neoznamujte platný rozsah v chars.
nebo
byteIndex není platný index v bytessouboru .
bytes nemá dostatečnou kapacitu od byteIndex konce pole pro přizpůsobení výsledných bajtů.
Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).
a
EncoderFallback je nastaveno na EncoderExceptionFallback.
Příklady
Následující příklad určuje počet bajtů potřebných ke kódování tří znaků z pole znaků, kóduje znaky a zobrazí výsledné bajty.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
// Get different encodings.
Encoding u7 = Encoding.UTF7;
Encoding u8 = Encoding.UTF8;
Encoding u16LE = Encoding.Unicode;
Encoding u16BE = Encoding.BigEndianUnicode;
Encoding u32 = Encoding.UTF32;
// Encode three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes( myChars, 4, 3, u7 );
PrintCountsAndBytes( myChars, 4, 3, u8 );
PrintCountsAndBytes( myChars, 4, 3, u16LE );
PrintCountsAndBytes( myChars, 4, 3, u16BE );
PrintCountsAndBytes( myChars, 4, 3, u32 );
}
public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( chars, index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode the array of chars.
byte[] bytes = enc.GetBytes( chars, index, count );
// The following is an alternative way to encode the array of chars:
// byte[] bytes = new byte[iBC];
// enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF) }
' Get different encodings.
Dim u7 As Encoding = Encoding.UTF7
Dim u8 As Encoding = Encoding.UTF8
Dim u16LE As Encoding = Encoding.Unicode
Dim u16BE As Encoding = Encoding.BigEndianUnicode
Dim u32 As Encoding = Encoding.UTF32
' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
PrintCountsAndBytes(myChars, 4, 3, u7)
PrintCountsAndBytes(myChars, 4, 3, u8)
PrintCountsAndBytes(myChars, 4, 3, u16LE)
PrintCountsAndBytes(myChars, 4, 3, u16BE)
PrintCountsAndBytes(myChars, 4, 3, u32)
End Sub
Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(chars, index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode the array of chars.
Dim bytes As Byte() = enc.GetBytes(chars, index, count)
' The following is an alternative way to encode the array of chars:
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
' Dim bytes(iBC - 1) As Byte
' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Poznámky
Chcete-li vypočítat přesnou velikost pole potřebnou GetBytes k uložení výsledných bajtů, měli byste volat metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda Encoding.GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou GetBytesverzi .
Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.
Viz také
Platí pro
GetBytes(String, Int32, Int32, Byte[], Int32)
Při přepsání v odvozené třídě zakóduje sadu znaků ze zadaného řetězce do zadaného pole bajtů.
public:
virtual int GetBytes(System::String ^ s, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public virtual int GetBytes(string s, int charIndex, int charCount, byte[] bytes, int byteIndex);
abstract member GetBytes : string * int * int * byte[] * int -> int
override this.GetBytes : string * int * int * byte[] * int -> int
Public Overridable Function GetBytes (s As String, charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer
Parametry
- s
- String
Řetězec obsahující sadu znaků, které se mají kódovat.
- charIndex
- Int32
Index prvního znaku, který se má kódovat.
- charCount
- Int32
Počet znaků, které se mají zakódovat.
- bytes
- Byte[]
Bajtové pole, které bude obsahovat výslednou sekvenci bajtů.
- byteIndex
- Int32
Index, na kterém chcete začít psát výslednou sekvenci bajtů.
Návraty
Skutečný počet bajtů zapsaných do bytes.
Výjimky
charIndex nebo charCountbyteIndex je menší než nula.
nebo
charIndex a charCount neoznamujte platný rozsah v s.
nebo
byteIndex není platný index v bytessouboru .
bytes nemá dostatečnou kapacitu od byteIndex konce pole pro přizpůsobení výsledných bajtů.
Došlo k záložnímu použití (další informace najdete v tématu Kódování znaků v .NET).
a
EncoderFallback je nastaveno na EncoderExceptionFallback.
Příklady
Následující příklad určuje počet bajtů potřebných ke kódování řetězce nebo rozsahu v řetězci, kóduje znaky a zobrazí výsledné bajty.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// The characters to encode:
// Latin Small Letter Z (U+007A)
// Latin Small Letter A (U+0061)
// Combining Breve (U+0306)
// Latin Small Letter AE With Acute (U+01FD)
// Greek Small Letter Beta (U+03B2)
// a high-surrogate value (U+D8FF)
// a low-surrogate value (U+DCFF)
String myStr = "za\u0306\u01FD\u03B2\uD8FF\uDCFF";
// Get different encodings.
Encoding u7 = Encoding.UTF7;
Encoding u8 = Encoding.UTF8;
Encoding u16LE = Encoding.Unicode;
Encoding u16BE = Encoding.BigEndianUnicode;
Encoding u32 = Encoding.UTF32;
// Encode the entire string, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the entire string:" );
PrintCountsAndBytes( myStr, u7 );
PrintCountsAndBytes( myStr, u8 );
PrintCountsAndBytes( myStr, u16LE );
PrintCountsAndBytes( myStr, u16BE );
PrintCountsAndBytes( myStr, u32 );
Console.WriteLine();
// Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine( "Encoding the characters from index 4 through 6:" );
PrintCountsAndBytes( myStr, 4, 3, u7 );
PrintCountsAndBytes( myStr, 4, 3, u8 );
PrintCountsAndBytes( myStr, 4, 3, u16LE );
PrintCountsAndBytes( myStr, 4, 3, u16BE );
PrintCountsAndBytes( myStr, 4, 3, u32 );
}
public static void PrintCountsAndBytes( String s, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( s.Length );
Console.Write( " {0,-3} :", iMBC );
// Encode the entire string.
byte[] bytes = enc.GetBytes( s );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-30} :", enc.ToString() );
// Display the exact byte count.
int iBC = enc.GetByteCount( s.ToCharArray(), index, count );
Console.Write( " {0,-3}", iBC );
// Display the maximum byte count.
int iMBC = enc.GetMaxByteCount( count );
Console.Write( " {0,-3} :", iMBC );
// Encode a range of characters in the string.
byte[] bytes = new byte[iBC];
enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
public static void PrintHexBytes( byte[] bytes ) {
if (( bytes == null ) || ( bytes.Length == 0 ))
{
Console.WriteLine( "<none>" );
}
else {
for ( int i = 0; i < bytes.Length; i++ )
Console.Write( "{0:X2} ", bytes[i] );
Console.WriteLine();
}
}
}
/*
This code produces the following output.
Encoding the entire string:
System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' The characters to encode:
' Latin Small Letter Z (U+007A)
' Latin Small Letter A (U+0061)
' Combining Breve (U+0306)
' Latin Small Letter AE With Acute (U+01FD)
' Greek Small Letter Beta (U+03B2)
' a high-surrogate value (U+D8FF)
' a low-surrogate value (U+DCFF)
Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) & ChrW(&HD8FF) & ChrW(&HDCFF)
' Get different encodings.
Dim u7 As Encoding = Encoding.UTF7
Dim u8 As Encoding = Encoding.UTF8
Dim u16LE As Encoding = Encoding.Unicode
Dim u16BE As Encoding = Encoding.BigEndianUnicode
Dim u32 As Encoding = Encoding.UTF32
' Encode the entire string, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the entire string:")
PrintCountsAndBytes(myStr, u7)
PrintCountsAndBytes(myStr, u8)
PrintCountsAndBytes(myStr, u16LE)
PrintCountsAndBytes(myStr, u16BE)
PrintCountsAndBytes(myStr, u32)
Console.WriteLine()
' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
Console.WriteLine("Encoding the characters from index 4 through 6:")
PrintCountsAndBytes(myStr, 4, 3, u7)
PrintCountsAndBytes(myStr, 4, 3, u8)
PrintCountsAndBytes(myStr, 4, 3, u16LE)
PrintCountsAndBytes(myStr, 4, 3, u16BE)
PrintCountsAndBytes(myStr, 4, 3, u32)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(s)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(s.Length)
Console.Write(" {0,-3} :", iMBC)
' Encode the entire string.
Dim bytes As Byte() = enc.GetBytes(s)
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-30} :", enc.ToString())
' Display the exact byte count.
Dim iBC As Integer = enc.GetByteCount(s.ToCharArray(), index, count)
Console.Write(" {0,-3}", iBC)
' Display the maximum byte count.
Dim iMBC As Integer = enc.GetMaxByteCount(count)
Console.Write(" {0,-3} :", iMBC)
' Encode a range of characters in the string.
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates the array with the exact number of elements required.
Dim bytes(iBC - 1) As Byte
enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))
' Display all the encoded bytes.
PrintHexBytes(bytes)
End Sub
Public Shared Sub PrintHexBytes(bytes() As Byte)
If bytes Is Nothing OrElse bytes.Length = 0 Then
Console.WriteLine("<none>")
Else
Dim i As Integer
For i = 0 To bytes.Length - 1
Console.Write("{0:X2} ", bytes(i))
Next i
Console.WriteLine()
End If
End Sub
End Class
'This code produces the following output.
'
'Encoding the entire string:
'System.Text.UTF7Encoding : 18 23 :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding : 12 24 :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 14 16 :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 14 16 :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 24 32 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding : 10 11 :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding : 6 12 :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding : 6 8 :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding : 6 8 :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding : 8 16 :B2 03 00 00 FF FC 04 00
Poznámky
Chcete-li vypočítat přesnou velikost pole potřebnou GetBytes k uložení výsledných bajtů, měli byste volat metodu GetByteCount . Pokud chcete vypočítat maximální velikost pole, zavolejte metodu GetMaxByteCount . Metoda GetByteCount obecně umožňuje přidělení menší paměti, zatímco GetMaxByteCount metoda obvykle provádí rychleji.
Pokud jsou data, která se mají převést, k dispozici pouze v sekvenčních blocích (jako jsou data načtená z datového proudu) nebo pokud je množství dat tak velké, že je potřeba je rozdělit na menší bloky, měli byste použít metodu Decoder nebo metodu Encoder poskytovanou metodou GetDecoder nebo GetEncoder v odvozené třídě.
Metoda GetByteCount určuje, kolik bajtů má za následek kódování sady znaků Unicode a GetBytes metoda provádí skutečné kódování. Metoda Encoding.GetBytes očekává diskrétní převody, na rozdíl od Encoder.GetBytes metody, která zpracovává více převodů v jednom vstupním datovém proudu.
Podporuje se několik verzí GetByteCount a GetBytes je podporováno. Tady je několik aspektů programování pro použití těchto metod:
Aplikace může potřebovat kódovat mnoho vstupních znaků na znakovou stránku a zpracovávat znaky pomocí více volání. V tomto případě pravděpodobně budete muset udržovat stav mezi voláními, přičemž berete v úvahu stav, který je trvalý použitým objektem Encoder . (Například sekvence znaků, která obsahuje náhradní páry, může končit vysokou náhradou. Pamatuje Encoder si, že vysoký náhradník tak, aby se mohl kombinovat s nízkou náhradou na začátku následujícího volání. Encoding Nebude možné zachovat stav, takže znak se odešle do EncoderFallback.)
Pokud vaše aplikace zpracovává řetězcové vstupy, měli byste použít řetězcovou GetBytesverzi .
Verze GetBytes(Char*, Int32, Byte*, Int32) vyrovnávací paměti znaků Unicode umožňuje některé rychlé techniky, zejména s více voláními pomocí objektu Encoder nebo vložení do stávajících vyrovnávacích pamětí. Mějte však na paměti, že tato verze metody je někdy nebezpečná, protože jsou vyžadovány ukazatele.
Pokud vaše aplikace musí převést velké množství dat, měla by znovu použít výstupní vyrovnávací paměť. V tomto případě je nejlepší volbou verze, GetBytes která podporuje pole bajtů.
Zvažte použití Encoder.Convert metody místo GetByteCount. Metoda převodu převede co nejvíce dat a vyvolá výjimku, pokud je výstupní vyrovnávací paměť příliš malá. Pro průběžné kódování datového proudu je tato metoda často nejlepší volbou.