Encoding.GetPreamble Yöntem

Tanım

Türetilmiş bir sınıfta geçersiz kılındığında, kullanılan kodlamayı belirten bir bayt dizisi döndürür.

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()

Döndürülenler

Byte[]

Kullanılan kodlamayı belirten bir bayt dizisi içeren bayt dizisi.

-veya-

Ön derleme gerekli değilse, sıfır uzunluklu bir bayt dizisi.

Örnekler

Aşağıdaki örnek, ön derlemeye göre kodlamanın bayt sırasını belirler.

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

/*
This code produces the following output.

The Unicode encoder is encoding in little-endian order.

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

Açıklamalar

İsteğe bağlı olarak, nesnesi kodlama Encoding işleminden kaynaklanan bayt dizisine ön ek olarak eklenebilen bir bayt dizisi olan bir ön derleme sağlar. Ön parçada bayt sırası işareti (Unicode, kod noktası U+FEFF) varsa, kod çözücüye bayt sırasını ve dönüştürme biçimini veya UTF'yi belirlemesine yardımcı olur.

Unicode bayt sırası işareti (BOM) aşağıdaki gibi serileştirilir (onaltılık olarak):

  • UTF-8: EF BB BF

  • UTF-16 büyük endian bayt sırası: FE FF

  • UTF-16 küçük endian bayt sırası: FF FE

  • UTF-32 büyük endian bayt siparişi: 00 00 FE FF

  • UTF-32 küçük endian bayt siparişi: FF FE 00 00

Ürün reçetesini kullanmanız gerekir çünkü nesneye başvuru Encoding kaybı olan dosyalar için kodlamanın neredeyse belirli bir tanımlamasını sağlar; örneğin etiketlenmemiş veya yanlış etiketlenmiş web verileri ya da bir işletmenin uluslararası endişeleri veya başka verileri olmadığında depolanan rastgele metin dosyaları. Genellikle veriler tutarlı ve düzgün etiketlenmişse (tercihen UTF-8 veya UTF-16'da) kullanıcı sorunları önlenebilir.

Kodlama türü sağlayan standartlar için ürün reçetesi biraz yedeklidir. Ancak, bir sunucunun doğru kodlama üst bilgisini göndermesine yardımcı olmak için kullanılabilir. Alternatif olarak, kodlamanın aksi takdirde kaybolması durumunda geri dönüş olarak kullanılabilir.

Ürün reçetesi kullanmanın bazı dezavantajları vardır. Örneğin, ürün reçetesi kullanan veritabanı alanlarının nasıl sınırlandığını bilmek zor olabilir. Dosyaların birleştirilmesi de sorun olabilir, örneğin, dosyalar gereksiz bir karakter verilerin ortasında olacak şekilde birleştirildiğinde. Ancak, birkaç dezavantaja rağmen, ürün reçetesinin kullanılması kesinlikle önerilir.

Bayt sırası ve bayt sırası işareti hakkında daha fazla bilgi için, Unicode giriş sayfasındaki Unicode Standardı'na bakın.

Dikkat

Kodlanmış baytların kodunun düzgün bir şekilde çözülmesini sağlamak için kodlanmış baytlara ön ek olarak bir ön ek oluşturmanız gerekir. Ancak, çoğu kodlama bir ön derleme sağlamaz. Kodlanmış baytların kodunun düzgün bir şekilde çözülmesini sağlamak için, önceden oluşturulmuş bir Unicode kodlaması UTF8Encoding( , UnicodeEncodingveya UTF32Encoding) kullanmanız gerekir.

Şunlara uygulanır