Encoding.GetMaxCharCount(Int32) Methode

Definition

Wenn eine abgeleitete Klasse überschrieben wird, wird die maximale Anzahl von Zeichen berechnet, die durch Decodieren der angegebenen Anzahl von Bytes erzeugt werden.

public:
 abstract int GetMaxCharCount(int byteCount);
public abstract int GetMaxCharCount(int byteCount);
abstract member GetMaxCharCount : int -> int
Public MustOverride Function GetMaxCharCount (byteCount As Integer) As Integer

Parameter

byteCount
Int32

Die Anzahl der Bytes, die decodiert werden sollen.

Gibt zurück

Die maximale Anzahl von Zeichen, die durch Decodieren der angegebenen Anzahl von Bytes erzeugt werden.

Ausnahmen

byteCount ist kleiner als 0 (null).

Ein Fallback ist aufgetreten (weitere Informationen finden Sie unter "Zeichencodierung in .NET")

-und-

DecoderFallback ist auf DecoderExceptionFallback festgelegt.

Beispiele

Im folgenden Beispiel wird eine Zeichenfolge in ein Bytearray codiert und dann die Bytes in ein Array von Zeichen decodiert.

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ăǽβ

Hinweise

Um die genaue Arraygröße zu berechnen, die zum GetChars Speichern der resultierenden Zeichen erforderlich ist, sollten Sie die GetCharCount Methode verwenden. Verwenden Sie die GetMaxCharCount Methode, um die maximale Arraygröße zu berechnen. Die GetCharCount Methode ermöglicht in der Regel die Zuordnung von weniger Arbeitsspeicher, während die GetMaxCharCount Methode im Allgemeinen schneller ausgeführt wird.

GetMaxCharCount Ruft eine Worst-Case-Zahl ab, einschließlich des schlimmsten Falls für die aktuell ausgewählte DecoderFallback. Wenn ein Fallback mit einer potenziell großen Zeichenfolge ausgewählt wird, GetMaxCharCount werden große Werte abgerufen.

In den meisten Fällen ruft diese Methode angemessene Zahlen für kleine Zeichenfolgen ab. Bei großen Zeichenfolgen müssen Sie möglicherweise zwischen der Verwendung sehr großer Puffer und dem Abfangen von Fehlern im seltenen Fall wählen, dass ein angemessenerer Puffer zu klein ist. Möglicherweise möchten Sie auch einen anderen Ansatz in Betracht ziehen, der verwendet GetCharCount oder verwendet wird Decoder.Convert.

GetMaxCharCount hat keine Beziehung zu GetBytes. Wenn Sie für die Verwendung mit GetByteseiner ähnlichen Funktion eine ähnliche Funktion benötigen, sollten Sie verwenden GetMaxByteCount.

Bei Verwendung GetMaxCharCountsollten Sie den Ausgabepuffer basierend auf der maximalen Größe des Eingabepuffers zuordnen. Wenn der Ausgabepuffer in der Größe eingeschränkt ist, können Sie die Decoder.Convert Methode verwenden.

Beachten Sie, dass GetMaxCharCount der schlechteste Fall für Restbytes aus einem vorherigen Encodervorgang berücksichtigt wird. Bei den meisten Codeseiten ruft das Übergeben eines Werts von 0 an diese Methode Werte ab, die größer oder gleich 1 sind.

Note

GetMaxCharCount(N) ist nicht unbedingt derselbe Wert wie N* GetMaxCharCount(1).

Hinweise für Ausführende

Alle Encoding Implementierungen müssen sicherstellen, dass keine Pufferüberlaufausnahmen auftreten, wenn Puffer entsprechend den Ergebnissen der Berechnungen dieser Methode angepasst werden.

Gilt für:

Weitere Informationen