Encoding.GetPreamble Metodo

Definizione

Quando sottoposto a override in una classe derivata, restituisce una sequenza di byte che specifica la codifica utilizzata.

public:
 virtual cli::array <System::Byte> ^ GetPreamble();
public virtual byte[] GetPreamble();
abstract member GetPreamble : unit -> byte[]
override this.GetPreamble : unit -> byte[]
Public Overridable Function GetPreamble () As Byte()

Valori restituiti

Byte[]

Matrice di byte contenente una sequenza di byte che specifica la codifica utilizzata.

oppure

Matrice di byte di lunghezza zero, se non è necessario un preambolo.

Esempio

Nell'esempio seguente viene determinato l'ordine dei byte della codifica in base al preambolo.

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 contain a 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.");
            }
         }
      }
   }
}

/*
This code produces the following output.

The Unicode encoder is encoding in little-endian order.

*/
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

'This code produces the following output.
'
'The Unicode encoder is encoding in little-endian order.
'

Commenti

Facoltativamente, l'oggetto Encoding fornisce un preambolo che è una matrice di byte che può essere preceduta dalla sequenza di byte risultante dal processo di codifica. Se il preambolo contiene un byte order mark (in Unicode, punto di codice U+FEFF), aiuta il decodificatore a determinare l'ordine dei byte e il formato di trasformazione o UTF.

Il byte order mark Unicode (BOM) viene serializzato come segue (in formato esadecimale):

  • UTF-8: EF BB BF

  • Ordine dei byte big endian UTF-16: FE FF

  • UTF-16 little endian byte order: FF FE

  • UTF-32 big endian byte order: 00 00 FE FF

  • UTF-32 little endian byte order: FF FE 00 00

È consigliabile utilizzare la distinta base, perché fornisce quasi certa identificazione di una codifica per i file che altrimenti hanno perso riferimento all'oggetto Encoding , ad esempio, dati Web senza tag o file di testo casuali non contrassegnati correttamente quando un'azienda non ha problemi internazionali o altri dati. Spesso i problemi utente possono essere evitati se i dati sono contrassegnati in modo coerente e corretto, preferibilmente in UTF-8 o UTF-16.

Per gli standard che forniscono un tipo di codifica, un bom è un po' ridondante. Tuttavia, può essere usato per consentire a un server di inviare l'intestazione di codifica corretta. In alternativa, può essere usato come fallback nel caso in cui la codifica vada persa in caso contrario.

Esistono alcuni svantaggi per l'uso di una distinta base. Ad esempio, sapere come limitare i campi di database che usano una distinta base può essere difficile. La concatenazione dei file può anche essere un problema, ad esempio quando i file vengono uniti in modo tale che un carattere non necessario possa finire al centro dei dati. Nonostante i pochi svantaggi, tuttavia, l'uso di un BOM è altamente consigliato.

Per ulteriori informazioni sull'ordine dei byte e sul contrassegno di ordine dei byte, vedere Lo standard Unicode nella home page Unicode.

Attenzione

Per assicurarsi che i byte codificati siano decodificati correttamente, è necessario anteporre un preambolo ai byte codificati. Tuttavia, la maggior parte delle codifiche non fornisce un preambolo. Per assicurarsi che i byte codificati siano decodificati correttamente, è necessario usare una codifica Unicode, ovvero , UTF8EncodingUnicodeEncodingo UTF32Encoding, con un preambolo.

Si applica a