UTF32Encoding.GetBytes 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將一組字元編碼成位元組序列。
多載
GetBytes(Char*, Int32, Byte*, Int32) |
將起始於指定字元指標的一組字元編碼成位元組序列;儲存該位元組序列時,係以指定的位元組指標為起始點。 |
GetBytes(Char[], Int32, Int32, Byte[], Int32) |
將指定字元陣列中的一組字元編碼成指定的位元組陣列。 |
GetBytes(String, Int32, Int32, Byte[], Int32) |
將指定 String 中的一組字元編碼成指定的位元組陣列。 |
GetBytes(Char*, Int32, Byte*, Int32)
重要
此 API 不符合 CLS 規範。
將起始於指定字元指標的一組字元編碼成位元組序列;儲存該位元組序列時,係以指定的位元組指標為起始點。
public:
override int GetBytes(char* chars, int charCount, System::Byte* bytes, int byteCount);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public override int GetBytes (char* chars, int charCount, byte* bytes, int byteCount);
[System.CLSCompliant(false)]
public override int GetBytes (char* chars, int charCount, byte* bytes, int byteCount);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
override this.GetBytes : nativeptr<char> * int * nativeptr<byte> * int -> int
參數
- chars
- Char*
要編碼的第一個字元指標。
- charCount
- Int32
要編碼的字元數。
- bytes
- Byte*
開始寫入結果位元組序列的位置指標。
- byteCount
- Int32
寫入的最大位元組數。
傳回
bytes
參數所指示位置上寫入的實際位元組數目。
- 屬性
例外狀況
charCount
或 byteCount
小於零。
發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)
-和-
備註
若要計算儲存結果位元組所需的 GetBytes 確切數位大小,請呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常會配置較少的記憶體,而 GetMaxByteCount 方法通常會更快執行。
發生錯誤偵測時,無效的序列會導致這個方法擲回 ArgumentException。 若未偵測錯誤,則會忽略無效的序列,而且不會擲回例外狀況。
要轉換的數據,例如從數據流讀取的數據,可能只能在循序區塊中使用。 在此情況下,或者,如果資料量太大,因此需要分成較小的區塊,則應用程式會分別使用 DecoderEncoder 方法或 方法所提供的 GetDecoder 或 GetEncoder 。
重要
為了確保編碼的位元組在儲存為檔案或數據流時正確譯碼,您可以使用前置詞來前置編碼位元組的數據流。 在位元組數據流開頭插入前置詞 (,例如要寫入檔案的一系列位元組開頭,) 是開發人員的責任。 方法 GetBytes 不會在一連串編碼位元組的開頭加上前置詞。
另請參閱
適用於
GetBytes(Char[], Int32, Int32, Byte[], Int32)
將指定字元陣列中的一組字元編碼成指定的位元組陣列。
public:
override int GetBytes(cli::array <char> ^ chars, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public override int GetBytes (char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex);
override this.GetBytes : char[] * int * int * byte[] * int -> int
Public Overrides Function GetBytes (chars As Char(), charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer
參數
- chars
- Char[]
包含要解碼之一組字元的字元陣列。
- charIndex
- Int32
要編碼的第一個字元索引。
- charCount
- Int32
要編碼的字元數。
- bytes
- Byte[]
要包含結果位元組序列的位元組陣列。
- byteIndex
- Int32
要開始寫入結果位元組序列的索引。
傳回
寫入 bytes
的實際位元組數。
例外狀況
charIndex
、charCount
或 byteIndex
小於零。
-或-
charIndex
與 charCount
不代表 chars
中有效的範圍。
-或-
byteIndex
在 bytes
中不是有效的索引。
發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)
-和-
範例
下列範例會決定從字元數位列編碼三個字元所需的位元組數目,然後編碼字元並顯示產生的位元組。
using namespace System;
using namespace System::Text;
void PrintCountsAndBytes( array<Char>^chars, int index, int count, Encoding^ enc );
void PrintHexBytes( array<Byte>^bytes );
int 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)
array<Char>^myChars = gcnew array<Char>(7){
L'z',L'a',L'\u0306',L'\u01FD',L'\u03B2',L'\xD8FF',L'\xDCFF'
};
// Create instances of different encodings.
UTF7Encoding^ u7 = gcnew UTF7Encoding;
UTF8Encoding^ u8Nobom = gcnew UTF8Encoding( false,true );
UTF8Encoding^ u8Bom = gcnew UTF8Encoding( true,true );
UTF32Encoding ^ u32Nobom = gcnew UTF32Encoding( false,false,true );
UTF32Encoding ^ u32Bom = gcnew UTF32Encoding( false,true,true );
// 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, u8Nobom );
PrintCountsAndBytes( myChars, 4, 3, u8Bom );
PrintCountsAndBytes( myChars, 4, 3, u32Nobom );
PrintCountsAndBytes( myChars, 4, 3, u32Bom );
}
void PrintCountsAndBytes( array<Char>^chars, int index, int count, Encoding^ enc )
{
// Display the name of the encoding used.
Console::Write( "{0,-25} :", enc );
// 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 );
// Get the byte order mark, if any.
array<Byte>^preamble = enc->GetPreamble();
// Combine the preamble and the encoded bytes.
array<Byte>^bytes = gcnew array<Byte>(preamble->Length + iBC);
Array::Copy( preamble, bytes, preamble->Length );
enc->GetBytes( chars, index, count, bytes, preamble->Length );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
void PrintHexBytes( array<Byte>^bytes )
{
if ( (bytes == nullptr) || (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.UTF8Encoding : 6 12 :EF BB BF CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 8 12 :B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 8 12 :FF FE 00 00 B2 03 00 00 FF FC 04 00
*/
using System;
using System.Text;
public class SamplesUTF32Encoding {
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[7] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };
// Create instances of different encodings.
UTF7Encoding u7 = new UTF7Encoding();
UTF8Encoding u8Nobom = new UTF8Encoding( false, true );
UTF8Encoding u8Bom = new UTF8Encoding( true, true );
UTF32Encoding u32Nobom = new UTF32Encoding( false, false, true );
UTF32Encoding u32Bom = new UTF32Encoding( false, true, true );
// 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, u8Nobom );
PrintCountsAndBytes( myChars, 4, 3, u8Bom );
PrintCountsAndBytes( myChars, 4, 3, u32Nobom );
PrintCountsAndBytes( myChars, 4, 3, u32Bom );
}
public static void PrintCountsAndBytes( char[] chars, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-25} :", 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 );
// Get the byte order mark, if any.
byte[] preamble = enc.GetPreamble();
// Combine the preamble and the encoded bytes.
byte[] bytes = new byte[preamble.Length + iBC];
Array.Copy( preamble, bytes, preamble.Length );
enc.GetBytes( chars, index, count, bytes, preamble.Length );
// 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.UTF8Encoding : 6 12 :EF BB BF CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 8 12 :B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 8 12 :FF FE 00 00 B2 03 00 00 FF FC 04 00
*/
Imports System.Text
Public Class SamplesUTF32Encoding
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)}
' Create instances of different encodings.
Dim u7 As New UTF7Encoding()
Dim u8Nobom As New UTF8Encoding(False, True)
Dim u8Bom As New UTF8Encoding(True, True)
Dim u32Nobom As New UTF32Encoding(False, False, True)
Dim u32Bom As New UTF32Encoding(False, True, True)
' 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, u8Nobom)
PrintCountsAndBytes(myChars, 4, 3, u8Bom)
PrintCountsAndBytes(myChars, 4, 3, u32Nobom)
PrintCountsAndBytes(myChars, 4, 3, u32Bom)
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,-25} :", 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)
' Get the byte order mark, if any.
Dim preamble As Byte() = enc.GetPreamble()
' Combine the preamble and the encoded bytes.
' NOTE: In Visual Basic, arrays contain one extra element by default.
' The following line creates an array with the exact number of elements required.
Dim bytes(preamble.Length + iBC - 1) As Byte
Array.Copy(preamble, bytes, preamble.Length)
enc.GetBytes(chars, index, count, bytes, preamble.Length)
' 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.UTF8Encoding : 6 12 :EF BB BF CE B2 F1 8F B3 BF
'System.Text.UTF32Encoding : 8 12 :B2 03 00 00 FF FC 04 00
'System.Text.UTF32Encoding : 8 12 :FF FE 00 00 B2 03 00 00 FF FC 04 00
備註
若要計算儲存結果位元組所需的 GetBytes 確切數位大小,請呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常會配置較少的記憶體,而 GetMaxByteCount 方法通常會更快執行。
發生錯誤偵測時,無效的序列會導致這個方法擲回 ArgumentException。 若未偵測錯誤,則會忽略無效的序列,而且不會擲回例外狀況。
要轉換的數據,例如從數據流讀取的數據,可能只能在循序區塊中使用。 在此情況下,或者,如果資料量太大,因此需要分成較小的區塊,則應用程式會分別使用 DecoderEncoder 方法或 方法所提供的 GetDecoder 或 GetEncoder 。
重要
為了確保編碼的位元組在儲存為檔案或數據流時正確譯碼,您可以使用前置詞來前置編碼位元組的數據流。 在位元組數據流開頭插入前置詞 (,例如要寫入檔案的一系列位元組開頭,) 是開發人員的責任。 方法 GetBytes 不會在一連串編碼位元組的開頭加上前置詞。
另請參閱
適用於
GetBytes(String, Int32, Int32, Byte[], Int32)
將指定 String 中的一組字元編碼成指定的位元組陣列。
public:
override int GetBytes(System::String ^ s, int charIndex, int charCount, cli::array <System::Byte> ^ bytes, int byteIndex);
public override int GetBytes (string s, int charIndex, int charCount, byte[] bytes, int byteIndex);
override this.GetBytes : string * int * int * byte[] * int -> int
Public Overrides Function GetBytes (s As String, charIndex As Integer, charCount As Integer, bytes As Byte(), byteIndex As Integer) As Integer
參數
- charIndex
- Int32
要編碼的第一個字元索引。
- charCount
- Int32
要編碼的字元數。
- bytes
- Byte[]
要包含結果位元組序列的位元組陣列。
- byteIndex
- Int32
要開始寫入結果位元組序列的索引。
傳回
寫入 bytes
的實際位元組數。
例外狀況
charIndex
、charCount
或 byteIndex
小於零。
-或-
charIndex
與 charCount
不代表 chars
中有效的範圍。
-或-
byteIndex
在 bytes
中不是有效的索引。
發生後援 (如需詳細資訊,請參閱 .NET 中的字元編碼)
-和-
範例
下列範例會決定編碼字串所需的位元組數目,然後編碼字串並顯示產生的位元組。
using namespace System;
using namespace System::Text;
void PrintCountsAndBytes( String^ s, Encoding^ enc );
void PrintHexBytes( array<Byte>^bytes );
int 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 = L"za\u0306\u01FD\u03B2\xD8FF\xDCFF";
// Create instances of different encodings.
UTF7Encoding^ u7 = gcnew UTF7Encoding;
UTF8Encoding^ u8Nobom = gcnew UTF8Encoding( false,true );
UTF8Encoding^ u8Bom = gcnew UTF8Encoding( true,true );
UTF32Encoding ^ u32Nobom = gcnew UTF32Encoding( false,false,true );
UTF32Encoding ^ u32Bom = gcnew UTF32Encoding( false,true,true );
// Get the byte counts and the bytes.
PrintCountsAndBytes( myStr, u7 );
PrintCountsAndBytes( myStr, u8Nobom );
PrintCountsAndBytes( myStr, u8Bom );
PrintCountsAndBytes( myStr, u32Nobom );
PrintCountsAndBytes( myStr, u32Bom );
}
void PrintCountsAndBytes( String^ s, Encoding^ enc )
{
// Display the name of the encoding used.
Console::Write( "{0,-25} :", enc );
// 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 );
// Get the byte order mark, if any.
array<Byte>^preamble = enc->GetPreamble();
// Combine the preamble and the encoded bytes.
array<Byte>^bytes = gcnew array<Byte>(preamble->Length + iBC);
Array::Copy( preamble, bytes, preamble->Length );
enc->GetBytes( s, 0, s->Length, bytes, preamble->Length );
// Display all the encoded bytes.
PrintHexBytes( bytes );
}
void PrintHexBytes( array<Byte>^bytes )
{
if ( (bytes == nullptr) || (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.UTF8Encoding : 12 24 :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 24 28 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 24 28 :FF FE 00 00 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
*/
using System;
using System.Text;
public class SamplesUTF32Encoding {
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";
// Create instances of different encodings.
UTF7Encoding u7 = new UTF7Encoding();
UTF8Encoding u8Nobom = new UTF8Encoding( false, true );
UTF8Encoding u8Bom = new UTF8Encoding( true, true );
UTF32Encoding u32Nobom = new UTF32Encoding( false, false, true );
UTF32Encoding u32Bom = new UTF32Encoding( false, true, true );
// Get the byte counts and the bytes.
PrintCountsAndBytes( myStr, u7 );
PrintCountsAndBytes( myStr, u8Nobom );
PrintCountsAndBytes( myStr, u8Bom );
PrintCountsAndBytes( myStr, u32Nobom );
PrintCountsAndBytes( myStr, u32Bom );
}
public static void PrintCountsAndBytes( String s, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-25} :", 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 );
// Get the byte order mark, if any.
byte[] preamble = enc.GetPreamble();
// Combine the preamble and the encoded bytes.
byte[] bytes = new byte[preamble.Length + iBC];
Array.Copy( preamble, bytes, preamble.Length );
enc.GetBytes( s, 0, s.Length, bytes, preamble.Length );
// 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.UTF8Encoding : 12 24 :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UTF32Encoding : 24 28 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
System.Text.UTF32Encoding : 24 28 :FF FE 00 00 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 SamplesUTF32Encoding
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)
' Create instances of different encodings.
Dim u7 As New UTF7Encoding()
Dim u8Nobom As New UTF8Encoding(False, True)
Dim u8Bom As New UTF8Encoding(True, True)
Dim u32Nobom As New UTF32Encoding(False, False, True)
Dim u32Bom As New UTF32Encoding(False, True, True)
' Get the byte counts and the bytes.
PrintCountsAndBytes(myStr, u7)
PrintCountsAndBytes(myStr, u8Nobom)
PrintCountsAndBytes(myStr, u8Bom)
PrintCountsAndBytes(myStr, u32Nobom)
PrintCountsAndBytes(myStr, u32Bom)
End Sub
Public Shared Sub PrintCountsAndBytes(s As String, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-25} :", 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)
' Get the byte order mark, if any.
Dim preamble As Byte() = enc.GetPreamble()
' Combine the preamble and the encoded bytes.
' NOTE: In Visual Basic, arrays contain one extra element by default.
' The following line creates an array with the exact number of elements required.
Dim bytes(preamble.Length + iBC - 1) As Byte
Array.Copy(preamble, bytes, preamble.Length)
enc.GetBytes(s, 0, s.Length, bytes, preamble.Length)
' 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.UTF8Encoding : 12 24 :EF BB BF 7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UTF32Encoding : 24 28 :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
'System.Text.UTF32Encoding : 24 28 :FF FE 00 00 7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00
備註
若要計算儲存結果位元組所需的 GetBytes 確切數位大小,請呼叫 GetByteCount 方法。 若要計算數位大小上限,請呼叫 GetMaxByteCount 方法。 方法 GetByteCount 通常會配置較少的記憶體,而 GetMaxByteCount 方法通常會更快執行。
發生錯誤偵測時,無效的序列會導致這個方法擲回 ArgumentException。 若未偵測錯誤,則會忽略無效的序列,而且不會擲回例外狀況。
要轉換的數據,例如從數據流讀取的數據,可能只能在循序區塊中使用。 在此情況下,或者,如果資料量太大,因此需要分成較小的區塊,則應用程式會分別使用 DecoderEncoder 方法或 方法所提供的 GetDecoder 或 GetEncoder 。
重要
若要確保編碼的位元組在儲存為檔案或數據流時正確譯碼,您可以將編碼位元組的數據流加上前置詞。 在位元組數據流開頭插入前置詞 (,例如要寫入檔案的一系列位元組開頭,) 是開發人員的責任。 方法 GetBytes 不會在前置詞前面加上編碼位元組序列的開頭。