Freigeben über


Encoding.GetPreamble-Methode

Beim Überschreiben in einer abgeleiteten Klasse wird eine Bytefolge zurückgegeben, die die verwendete Codierung angibt.

Namespace: System.Text
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Overridable Function GetPreamble As Byte()
'Usage
Dim instance As Encoding
Dim returnValue As Byte()

returnValue = instance.GetPreamble
public virtual byte[] GetPreamble ()
public:
virtual array<unsigned char>^ GetPreamble ()
public byte[] GetPreamble ()
public function GetPreamble () : byte[]

Rückgabewert

Ein Bytearray, das eine Bytefolge enthält, in der die verwendete Codierung angegeben ist. - oder - Ein Bytearray der Länge 0 (null), wenn keine Präambel erforderlich ist.

Hinweise

Die UTF-16- und UTF-32-Encoder können die Big-Endian-Bytereihenfolge (mit dem höchstwertigen Byte an erster Stelle) oder die Little-Endian-Bytereihenfolge (mit dem niedrigstwertigen Byte an erster Stelle) verwenden. Beispielsweise wird der lateinische Großbuchstabe A (U+0041) wie folgt serialisiert (Hexadezimalwert):

  • UTF-16-Big-Endian-Bytereihenfolge: 00 41

  • UTF-16-Little-Endian-Bytereihenfolge: 41 00

  • UTF-32-Big-Endian-Bytereihenfolge: 00 00 00 41

  • UTF-32-Little-Endian-Bytereihenfolge: 41 00 00 00

Optional stellt Encoding eine Präambel bereit. Dabei handelt es sich um ein Bytearray, das der Bytefolge vorangestellt werden kann, die sich aus dem Codierungsprozess ergibt. Falls die Präambel eine Bytereihenfolgemarkierung (in Unicode: Codepunkt U+FEFF) enthält, kann der Decoder daraus die Bytereihenfolge und das Transformationsformat oder UTF ermitteln. Die Unicode-Bytereihenfolgemarkierung wird wie folgt serialisiert (Hexadezimalwert):

  • UTF-8: EF BB BF

  • UTF-16-Big-Endian-Bytereihenfolge: FE FF

  • UTF-16-Little-Endian-Bytereihenfolge: FF FE

  • UTF-32-Big-Endian-Bytereihenfolge: 00 00 FE FF

  • UTF-32-Little-Endian-Bytereihenfolge: FF FE 00 00

Im Allgemeinen ist es effizienter, Unicode-Zeichen in der systemeigenen Bytereihenfolge zu speichern. So ist es besser, die Little-Endian-Bytereihenfolge auf entsprechenden Plattformen, beispielsweise auf Intel-Computern, zu verwenden.

Weitere Informationen über die Bytereihenfolge und die Bytereihenfolgemarkierung finden Sie im Unicode-Standard unter http://www.unicode.org (nur auf Englisch verfügbar).

Warnung

Damit die codierten Bytes ordnungsgemäß decodiert werden, stellen Sie codierten Bytes eine Präambel voran. Die meisten Codierungen stellen jedoch keine Präambel bereit. Stellen Sie sicher, dass die codierten Bytes einwandfrei decodiert werden, indem Sie eine Unicode-Codierung (also UTF8Encoding, UnicodeEncoding oder UTF32Encoding) mit einer Präambel verwenden.

Beispiel

Im folgenden Codebeispiel wird die Bytereihenfolge der Codierung auf Grundlage der Präambel bestimmt.

Imports System
Imports System.Text

Namespace GetPreambleExample
   Class GetPreambleExampleClass
      Shared Sub Main()
         Dim [unicode] As Encoding = Encoding.Unicode

         ' Get the preamble for the Unicode encoder. 
         ' In this case the preamble contains the byte order mark (BOM).
         Dim preamble As Byte() = [unicode].GetPreamble()

         ' Make sure a preamble was returned 
         ' and is large enough to contain a BOM.
         If preamble.Length >= 2 Then
            If preamble(0) = &HFE And preamble(1) = &HFF Then
               Console.WriteLine("The Unicode encoder is encoding in big-endian order.")
            Else
               If preamble(0) = &HFF And preamble(1) = &HFE Then
                  Console.WriteLine("The Unicode encoder is encoding in little-endian order.")
               End If
            End If
         End If
      End Sub
   End Class
End Namespace
using System;
using System.Text;

namespace GetPreambleExample
{
   class GetPreambleExampleClass
   {
      static void Main()
      {
         Encoding unicode = Encoding.Unicode;

         // Get the preamble for the Unicode encoder. 
         // In this case the preamble contains the byte order mark (BOM).
         byte[] preamble = unicode.GetPreamble();

         // Make sure a preamble was returned 
         // and is large enough to containa BOM.
         if(preamble.Length >= 2)
         {
            if(preamble[0] == 0xFE && preamble[1] == 0xFF)
            {
               Console.WriteLine("The Unicode encoder is encoding in big-endian order.");
            }
            else if(preamble[0] == 0xFF && preamble[1] == 0xFE)
            {
               Console.WriteLine("The Unicode encoder is encoding in little-endian order.");
            }
         }
      }
   }
}
using namespace System;
using namespace System::Text;
int main()
{
   Encoding^ unicode = Encoding::Unicode;
   
   // Get the preamble for the Unicode encoder. 
   // In this case the preamblecontains the Byte order mark (BOM).
   array<Byte>^preamble = unicode->GetPreamble();
   
   // Make sure a preamble was returned 
   // and is large enough to containa BOM.
   if ( preamble->Length >= 2 )
   {
      
      // if (preamble->Item[0] == 0xFE && preamble->Item[1] == 0xFF) 
      if ( preamble[ 0 ] == 0xFE && preamble[ 1 ] == 0xFF )
      {
         Console::WriteLine( "The Unicode encoder is encoding in big-endian order." );
      }
      // else if (preamble->Item[0] == 0xFF && preamble->Item[1] == 0xFE) 
      else
      
      // else if (preamble->Item[0] == 0xFF && preamble->Item[1] == 0xFE) 
      if ( preamble[ 0 ] == 0xFF && preamble[ 1 ] == 0xFE )
      {
         Console::WriteLine( "The Unicode encoder is encoding in little-endian order." );
      }
   }
}
package GetPreambleExample; 

import System.*;
import System.Text.*;

class GetPreambleExampleClass
{
    public static void main(String[] args)
    {
        Encoding unicode = Encoding.get_Unicode();

        // Get the preamble for the Unicode encoder. 
        // In this case the preamble contains the byte order mark (BOM).
        ubyte preamble[] = unicode.GetPreamble();

        // Make sure a preamble was returned 
        // and is large enough to containa BOM.
        if(preamble.length >= 2) {
            if(preamble[0] == 0xFE && preamble[1] == 0xFF) {
                Console.WriteLine("The Unicode encoder is "
                + "encoding in big-endian order.");
            }
            else {
                if(preamble[0] == 0xFF && preamble[1] == 0xFE) {
                    Console.WriteLine("The Unicode encoder is" 
                    + " encoding in little-endian order.");
                }
            }
        }
    } //main
} //GetPreambleExampleClass 

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

Encoding-Klasse
Encoding-Member
System.Text-Namespace