Encoding.GetCharCount Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Származtatott osztályban felülbírálva kiszámítja a bájtok sorozatának dekódolásával előállított karakterek számát.
Túlterhelések
| Name | Description |
|---|---|
| GetCharCount(Byte[]) |
Származtatott osztályban felülbírálva kiszámítja a megadott bájttömb összes bájtjának dekódolásával előállított karakterek számát. |
| GetCharCount(ReadOnlySpan<Byte>) |
Ha egy származtatott osztályban felül van bírálva, kiszámítja a megadott írásvédett bájttartomány dekódolásával előállított karakterek számát. |
| GetCharCount(Byte*, Int32) |
Származtatott osztályban felülbírálva kiszámítja a bájtok sorozatának a megadott bájtmutatótól kezdődő dekódolásával előállított karakterek számát. |
| GetCharCount(Byte[], Int32, Int32) |
Származtatott osztályban felülbírálva kiszámítja a megadott bájttömbből származó bájtsorozat dekódolásával előállított karakterek számát. |
GetCharCount(Byte[])
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
Származtatott osztályban felülbírálva kiszámítja a megadott bájttömb összes bájtjának dekódolásával előállított karakterek számát.
public:
virtual int GetCharCount(cli::array <System::Byte> ^ bytes);
public virtual int GetCharCount(byte[] bytes);
abstract member GetCharCount : byte[] -> int
override this.GetCharCount : byte[] -> int
Public Overridable Function GetCharCount (bytes As Byte()) As Integer
Paraméterek
- bytes
- Byte[]
A dekódolni kívánt bájtok sorozatát tartalmazó bájttömb.
Válaszok
A megadott bájtsorozat dekódolásával előállított karakterek száma.
Kivételek
bytes az null.
Hiba történt (további információ:
-és-
DecoderFallback DecoderExceptionFallbackértékre van állítva.
Példák
Az alábbi példa egy karakterláncot bájtok tömbjeként kódol, majd a bájtokat karaktertömbbe dekódolja.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
Encoding u32LE = Encoding.GetEncoding( "utf-32" );
Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );
// Use a string containing the following characters:
// 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)
String myStr = "za\u0306\u01FD\u03B2";
// Encode the string using the big-endian byte order.
byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );
// Encode the string using the little-endian byte order.
byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );
// Get the char counts, and decode the byte arrays.
Console.Write( "BE array with BE encoding : " );
PrintCountsAndChars( barrBE, u32BE );
Console.Write( "LE array with LE encoding : " );
PrintCountsAndChars( barrLE, u32LE );
}
public static void PrintCountsAndChars( byte[] bytes, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-25} :", enc.ToString() );
// Display the exact character count.
int iCC = enc.GetCharCount( bytes );
Console.Write( " {0,-3}", iCC );
// Display the maximum character count.
int iMCC = enc.GetMaxCharCount( bytes.Length );
Console.Write( " {0,-3} :", iMCC );
// Decode the bytes and display the characters.
char[] chars = enc.GetChars( bytes );
Console.WriteLine( chars );
}
}
/*
This code produces the following output. The question marks take the place of characters that cannot be displayed at the console.
BE array with BE encoding : System.Text.UTF32Encoding : 5 12 :zăǽβ
LE array with LE encoding : System.Text.UTF32Encoding : 5 12 :zăǽβ
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")
' Use a string containing the following characters:
' 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)
Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2)
' Encode the string using the big-endian byte order.
' 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 barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)
' Encode the string using the little-endian byte order.
' 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 barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)
' Get the char counts, and decode the byte arrays.
Console.Write("BE array with BE encoding : ")
PrintCountsAndChars(barrBE, u32BE)
Console.Write("LE array with LE encoding : ")
PrintCountsAndChars(barrLE, u32LE)
End Sub
Public Shared Sub PrintCountsAndChars(bytes() As Byte, enc As Encoding)
' Display the name of the encoding used.
Console.Write("{0,-25} :", enc.ToString())
' Display the exact character count.
Dim iCC As Integer = enc.GetCharCount(bytes)
Console.Write(" {0,-3}", iCC)
' Display the maximum character count.
Dim iMCC As Integer = enc.GetMaxCharCount(bytes.Length)
Console.Write(" {0,-3} :", iMCC)
' Decode the bytes and display the characters.
Dim chars As Char() = enc.GetChars(bytes)
Console.WriteLine(chars)
End Sub
End Class
'This code produces the following output. The question marks take the place of characters that cannot be displayed at the console.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 5 12 :zăǽβ
'LE array with LE encoding : System.Text.UTF32Encoding : 5 12 :zăǽβ
Megjegyzések
Az eredményként kapott karakterek tárolásához szükséges GetChars(Byte[]) pontos tömbméret kiszámításához használja a metódust GetCharCount(Byte[]) . A maximális tömbméret kiszámításához használja a metódust GetMaxCharCount(Int32) . A GetCharCount(Byte[]) metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxCharCount metódus általában gyorsabban fut.
A GetCharCount(Byte[]) metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars(Byte[]) metódus végrehajtja a tényleges dekódolást. A Encoding.GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.
A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:
Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között.
Ha az alkalmazás sztringkimeneteket kezel, használja a metódust GetString . Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.
A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.
Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.
Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.
Lásd még
A következőre érvényes:
GetCharCount(ReadOnlySpan<Byte>)
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
Ha egy származtatott osztályban felül van bírálva, kiszámítja a megadott írásvédett bájttartomány dekódolásával előállított karakterek számát.
public:
virtual int GetCharCount(ReadOnlySpan<System::Byte> bytes);
public virtual int GetCharCount(ReadOnlySpan<byte> bytes);
abstract member GetCharCount : ReadOnlySpan<byte> -> int
override this.GetCharCount : ReadOnlySpan<byte> -> int
Public Overridable Function GetCharCount (bytes As ReadOnlySpan(Of Byte)) As Integer
Paraméterek
- bytes
- ReadOnlySpan<Byte>
A dekódolni kívánt írásvédett bájtok tartománya.
Válaszok
A bájttartomány dekódolásával előállított karakterek száma.
Megjegyzések
Az eredményként kapott karakterek tárolásához szükséges pontos tömbméret GetChars kiszámításához használja a metódust GetCharCount . A maximális tömbméret kiszámításához használja a metódust GetMaxCharCount . A GetCharCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxCharCount metódus általában gyorsabban fut.
A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.
A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:
Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között.
Ha az alkalmazás sztringkimeneteket kezel, ajánlott a GetString metódust használni. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.
Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.
Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.
A következőre érvényes:
GetCharCount(Byte*, Int32)
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
Fontos
Ez az API nem CLS-kompatibilis.
Származtatott osztályban felülbírálva kiszámítja a bájtok sorozatának a megadott bájtmutatótól kezdődő dekódolásával előállított karakterek számát.
public:
virtual int GetCharCount(System::Byte* bytes, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetCharCount(byte* bytes, int count);
[System.CLSCompliant(false)]
public virtual int GetCharCount(byte* bytes, int count);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetCharCount(byte* bytes, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetCharCount(byte* bytes, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetCharCount : nativeptr<byte> * int -> int
override this.GetCharCount : nativeptr<byte> * int -> int
Paraméterek
- bytes
- Byte*
A dekódolni kívánt első bájtra mutató mutató.
- count
- Int32
A dekódolni kívánt bájtok száma.
Válaszok
A megadott bájtsorozat dekódolásával előállított karakterek száma.
- Attribútumok
Kivételek
bytes az null.
count kisebb, mint nulla.
Hiba történt (további információ:
-és-
DecoderFallback DecoderExceptionFallbackértékre van állítva.
Megjegyzések
Az eredményként kapott karakterek tárolásához szükséges pontos tömbméret GetChars kiszámításához használja a metódust GetCharCount . A maximális tömbméret kiszámításához használja a metódust GetMaxCharCount . A GetCharCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxCharCount metódus általában gyorsabban fut.
A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.
A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:
Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között.
Ha az alkalmazás sztringkimeneteket kezel, ajánlott a GetString metódust használni. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.
A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.
Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.
Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.
Lásd még
A következőre érvényes:
GetCharCount(Byte[], Int32, Int32)
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
- Forrás:
- Encoding.cs
Származtatott osztályban felülbírálva kiszámítja a megadott bájttömbből származó bájtsorozat dekódolásával előállított karakterek számát.
public:
abstract int GetCharCount(cli::array <System::Byte> ^ bytes, int index, int count);
public abstract int GetCharCount(byte[] bytes, int index, int count);
abstract member GetCharCount : byte[] * int * int -> int
Public MustOverride Function GetCharCount (bytes As Byte(), index As Integer, count As Integer) As Integer
Paraméterek
- bytes
- Byte[]
A dekódolni kívánt bájtok sorozatát tartalmazó bájttömb.
- index
- Int32
A dekódolni kívánt első bájt indexe.
- count
- Int32
A dekódolni kívánt bájtok száma.
Válaszok
A megadott bájtsorozat dekódolásával előállított karakterek száma.
Kivételek
bytes az null.
index vagy count kisebb, mint nulla.
-vagy-
index és count ne jelölje az érvényes tartományt a következőben bytes: .
Hiba történt (további információ:
-és-
DecoderFallback DecoderExceptionFallbackértékre van állítva.
Példák
Az alábbi példa egy sztringet konvertál egyik kódolásból a másikba.
using System;
using System.Text;
class Example
{
static void Main()
{
string unicodeString = "This string contains the unicode character Pi (\u03a0)";
// Create two different encodings.
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode;
// Convert the string into a byte array.
byte[] unicodeBytes = unicode.GetBytes(unicodeString);
// Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
// Convert the new byte[] into a char[] and then into a string.
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars);
// Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", unicodeString);
Console.WriteLine("Ascii converted string: {0}", asciiString);
}
}
// The example displays the following output:
// Original string: This string contains the unicode character Pi (Π)
// Ascii converted string: This string contains the unicode character Pi (?)
Imports System.Text
Class Example
Shared Sub Main()
Dim unicodeString As String = "This string contains the unicode character Pi (" & ChrW(&H03A0) & ")"
' Create two different encodings.
Dim ascii As Encoding = Encoding.ASCII
Dim unicode As Encoding = Encoding.Unicode
' Convert the string into a byte array.
Dim unicodeBytes As Byte() = unicode.GetBytes(unicodeString)
' Perform the conversion from one encoding to the other.
Dim asciiBytes As Byte() = Encoding.Convert(unicode, ascii, unicodeBytes)
' Convert the new byte array into a char array and then into a string.
Dim asciiChars(ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)-1) As Char
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)
Dim asciiString As New String(asciiChars)
' Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", unicodeString)
Console.WriteLine("Ascii converted string: {0}", asciiString)
End Sub
End Class
' The example displays the following output:
' Original string: This string contains the unicode character Pi (Π)
' Ascii converted string: This string contains the unicode character Pi (?)
Az alábbi példa bájttömbbe kódol egy sztringet, majd a bájtok tartományát karaktertömbbe dekódolja.
using System;
using System.Text;
public class SamplesEncoding {
public static void Main() {
// Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
Encoding u32LE = Encoding.GetEncoding( "utf-32" );
Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );
// Use a string containing the following characters:
// 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)
String myStr = "za\u0306\u01FD\u03B2";
// Encode the string using the big-endian byte order.
byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );
// Encode the string using the little-endian byte order.
byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );
// Get the char counts, decode eight bytes starting at index 0,
// and print out the counts and the resulting bytes.
Console.Write( "BE array with BE encoding : " );
PrintCountsAndChars( barrBE, 0, 8, u32BE );
Console.Write( "LE array with LE encoding : " );
PrintCountsAndChars( barrLE, 0, 8, u32LE );
}
public static void PrintCountsAndChars( byte[] bytes, int index, int count, Encoding enc ) {
// Display the name of the encoding used.
Console.Write( "{0,-25} :", enc.ToString() );
// Display the exact character count.
int iCC = enc.GetCharCount( bytes, index, count );
Console.Write( " {0,-3}", iCC );
// Display the maximum character count.
int iMCC = enc.GetMaxCharCount( count );
Console.Write( " {0,-3} :", iMCC );
// Decode the bytes and display the characters.
char[] chars = enc.GetChars( bytes, index, count );
// The following is an alternative way to decode the bytes:
// char[] chars = new char[iCC];
// enc.GetChars( bytes, index, count, chars, 0 );
Console.WriteLine( chars );
}
}
/*
This code produces the following output. The question marks take the place of characters that cannot be displayed at the console.
BE array with BE encoding : System.Text.UTF32Encoding : 2 6 :za
LE array with LE encoding : System.Text.UTF32Encoding : 2 6 :za
*/
Imports System.Text
Public Class SamplesEncoding
Public Shared Sub Main()
' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")
' Use a string containing the following characters:
' 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)
Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2)
' Encode the string using the big-endian byte order.
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates barrBE with the exact number of elements required.
Dim barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)
' Encode the string using the little-endian byte order.
' NOTE: In VB.NET, arrays contain one extra element by default.
' The following line creates barrLE with the exact number of elements required.
Dim barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)
' Get the char counts, decode eight bytes starting at index 0,
' and print out the counts and the resulting bytes.
Console.Write("BE array with BE encoding : ")
PrintCountsAndChars(barrBE, 0, 8, u32BE)
Console.Write("LE array with LE encoding : ")
PrintCountsAndChars(barrLE, 0, 8, u32LE)
End Sub
Public Shared Sub PrintCountsAndChars(bytes() As Byte, 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 character count.
Dim iCC As Integer = enc.GetCharCount(bytes, index, count)
Console.Write(" {0,-3}", iCC)
' Display the maximum character count.
Dim iMCC As Integer = enc.GetMaxCharCount(count)
Console.Write(" {0,-3} :", iMCC)
' Decode the bytes.
Dim chars As Char() = enc.GetChars(bytes, index, count)
' The following is an alternative way to decode the bytes:
' 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 chars(iCC - 1) As Char
' enc.GetChars( bytes, index, count, chars, 0 )
' Display the characters.
Console.WriteLine(chars)
End Sub
End Class
'This code produces the following output. The question marks take the place of characters that cannot be displayed at the console.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 2 6 :za
'LE array with LE encoding : System.Text.UTF32Encoding : 2 6 :za
Megjegyzések
Az eredményként kapott karakterek tárolásához szükséges GetChars pontos tömbméret kiszámításához használja a metódust GetCharCount . A maximális tömbméret kiszámításához használja a metódust GetMaxCharCount . A GetCharCount metódus általában kevesebb memória lefoglalását teszi lehetővé, míg a GetMaxCharCount metódus általában gyorsabban fut.
A GetCharCount metódus meghatározza, hogy hány karakter eredményez bájtsorozat dekódolását, és a GetChars metódus végrehajtja a tényleges dekódolást. A GetChars metódus különálló konverziókat vár, szemben a Decoder.GetChars metódussal, amely egyetlen bemeneti adatfolyamon több átvitelt kezel.
A verziók több verziója GetCharCountGetChars is támogatott. Az alábbi programozási szempontokat érdemes figyelembe venni az alábbi módszerek használatához:
Előfordulhat, hogy az alkalmazásnak több bemeneti bájtot kell dekódolnia egy kódlapról, és több hívással kell feldolgoznia a bájtokat. Ebben az esetben valószínűleg fenn kell tartania az állapotot a hívások között.
Ha az alkalmazás sztringkimeneteket kezel, ajánlott a GetString metódust használni. Mivel ennek a metódusnak ellenőriznie kell a sztring hosszát és le kell foglalnia egy puffert, kissé lassabb, de az eredményül kapott String típust kell előnyben részesíteni.
A bájtos verzió GetChars(Byte*, Int32, Char*, Int32) lehetővé tesz néhány gyors technikát, különösen a nagy pufferek több hívásával. Ne feledje azonban, hogy ez a metódusverzió néha nem biztonságos, mivel mutatókra van szükség.
Ha az alkalmazásnak nagy mennyiségű adatot kell konvertálnia, akkor újra fel kell használnia a kimeneti puffert. Ebben az esetben a GetChars(Byte[], Int32, Int32, Char[], Int32) kimeneti karakterpuffereket támogató verzió a legjobb választás.
Fontolja meg a metódus használatát ahelyett Decoder.Convert , hogy GetCharCount. A konvertálási módszer a lehető legtöbb adatot konvertálja, és kivételt eredményez, ha a kimeneti puffer túl kicsi. A streamek folyamatos dekódolásához gyakran ez a módszer a legjobb választás.