Aracılığıyla paylaş


UTF32Encoding.GetPreamble Yöntem

Tanım

Nesne bir tane sağlamak üzere yapılandırılmışsa UTF32Encoding UTF-32 biçiminde kodlanmış bir Unicode bayt sırası işareti döndürür.

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

Döndürülenler

Byte[]

Nesne bir tane sağlayacak şekilde yapılandırılmışsa UTF32Encoding Unicode bayt sırası işaretini içeren bir bayt dizisi. Aksi takdirde, bu yöntem sıfır uzunlukta bir bayt dizisi döndürür.

Örnekler

Aşağıdaki kod örneği, farklı UTF32Encoding örnekler için bayt sipariş işaretini alır ve görüntüler.

using namespace System;
using namespace System::Text;

void PrintHexBytes( array<Byte>^bytes );

int main()
{
   
   // Create instances of UTF32Encoding, with the byte order mark and without.
   UTF32Encoding ^ u32LeNone = gcnew UTF32Encoding;
   UTF32Encoding ^ u32BeNone = gcnew UTF32Encoding( true,false );
   UTF32Encoding ^ u32LeBom = gcnew UTF32Encoding( false,true );
   UTF32Encoding ^ u32BeBom = gcnew UTF32Encoding( true,true );
   
   // Display the preamble for each instance.
   PrintHexBytes( u32LeNone->GetPreamble() );
   PrintHexBytes( u32BeNone->GetPreamble() );
   PrintHexBytes( u32LeBom->GetPreamble() );
   PrintHexBytes( u32BeBom->GetPreamble() );
}

void PrintHexBytes( array<Byte>^bytes )
{
   if ( (bytes == nullptr) || (bytes->Length == 0) )
      Console::WriteLine( "<none>" );
   else
   {
      for ( int i = 0; i < bytes->Length; i++ )
         Console::Write( "{0:X2} ", bytes[ i ] );
      Console::WriteLine();
   }
}

/* 
This example displays the following output:
      FF FE 00 00
      <none>
      FF FE 00 00
      00 00 FE FF
*/
using System;
using System.Text;

public class SamplesUTF32Encoding
{
   public static void Main()
   {
      // Create instances of UTF32Encoding, with the byte order mark and without.
      UTF32Encoding u32LeNone = new UTF32Encoding();
      UTF32Encoding u32BeNone = new UTF32Encoding( true, false );
      UTF32Encoding u32LeBom  = new UTF32Encoding( false, true );
      UTF32Encoding u32BeBom  = new UTF32Encoding( true, true );

      // Display the preamble for each instance.
      PrintHexBytes( u32LeNone.GetPreamble() );
      PrintHexBytes( u32BeNone.GetPreamble() );
      PrintHexBytes( u32LeBom.GetPreamble() );
      PrintHexBytes( u32BeBom.GetPreamble() );
   }

   public static void PrintHexBytes( byte[] bytes )
   {

      if (( bytes == null ) || ( bytes.Length == 0 ))
        {
            Console.WriteLine( "<none>" );
        }
        else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }
   }
}
/*
This example displays the following output.
      FF FE 00 00
      <none>
      FF FE 00 00
      00 00 FE FF
*/
Imports System.Text

Public Class SamplesUTF32Encoding   
   Public Shared Sub Main()
      ' Create instances of UTF32Encoding, with the byte order mark and without.
      Dim u32LeNone As New UTF32Encoding()
      Dim u32BeNone As New UTF32Encoding(True, False)
      Dim u32LeBom As New UTF32Encoding(False, True)
      Dim u32BeBom As New UTF32Encoding(True, True)

      ' Display the preamble for each instance.
      PrintHexBytes(u32LeNone.GetPreamble())
      PrintHexBytes(u32BeNone.GetPreamble())
      PrintHexBytes(u32LeBom.GetPreamble())
      PrintHexBytes(u32BeBom.GetPreamble())
   End Sub

   Public Shared Sub PrintHexBytes(bytes() As Byte)
      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If
   End Sub
End Class
'This example displays the following output:
'       FF FE 00 00
'       FF FE 00 00
'       00 00 FE FF

Aşağıdaki örnek, ilki ürün reçetesi sağlamayan, ikincisi ise sağlayan iki UTF32Encoding nesnenin örneğini oluşturur. Ardından UTF-32 ile kodlanmış bir dize yazmadan önce BOM'u bir dosyaya yazmak için yöntemini çağırır GetPreamble . Örnekteki çıktıda gösterildiği gibi, ikinci kodlayıcıdan baytları kaydeden dosyada ilkinde dört bayt daha vardır.

using System;
using System.IO;
using System.Text;

public class Example
{
   public static void Main()
   {
      String s = "This is a string to write to a file using UTF-32 encoding.";

      // Write a file using the default constructor without a BOM.
      var enc = new UTF32Encoding(! BitConverter.IsLittleEndian, false);
      Byte[] bytes = enc.GetBytes(s);
      WriteToFile(@".\NoPreamble.txt", enc, bytes);

      // Use BOM.
      enc = new UTF32Encoding(! BitConverter.IsLittleEndian, true);
      WriteToFile(@".\Preamble.txt", enc, bytes);
   }

   private static void WriteToFile(String fn, Encoding enc, Byte[] bytes)
   {
      var fs = new FileStream(fn, FileMode.Create);
      Byte[] preamble = enc.GetPreamble();
      fs.Write(preamble, 0, preamble.Length);
      Console.WriteLine("Preamble has {0} bytes", preamble.Length);
      fs.Write(bytes, 0, bytes.Length);
      Console.WriteLine("Wrote {0} bytes to {1}.", fs.Length, fn);
      fs.Close();
      Console.WriteLine();
   }
}
// The example displays the following output:
//       Preamble has 0 bytes
//       Wrote 232 bytes to .\NoPreamble.txt.
//
//       Preamble has 4 bytes
//       Wrote 236 bytes to .\Preamble.txt.
Imports System.IO
Imports System.Text

Module Example
   Public Sub Main()
      Dim s As String = "This is a string to write to a file using UTF-32 encoding."
      
      ' Write a file using the default constructor without a BOM.
      Dim enc As New UTF32Encoding(Not BitConverter.IsLittleEndian, False)
      Dim bytes() As Byte = enc.GetBytes(s)
      WriteToFile("NoPreamble.txt", enc, bytes)

      ' Use BOM.
      enc = New UTF32Encoding(Not BitConverter.IsLittleEndian, True)
      WriteToFile("Preamble.txt", enc, bytes)
   End Sub

   Private Sub WriteToFile(fn As String, enc As Encoding, bytes As Byte())
      Dim fs As New FileStream(fn, FileMode.Create)
      Dim preamble() As Byte = enc.GetPreamble()
      fs.Write(preamble, 0, preamble.Length)
      Console.WriteLine("Preamble has {0} bytes", preamble.Length)
      fs.Write(bytes, 0, bytes.Length)
      Console.WriteLine("Wrote {0} bytes to {1}.", fs.Length, fn)
      fs.Close()
      Console.WriteLine()
   End Sub
End Module
' The example displays the following output:
'       Preamble has 0 bytes
'       Wrote 232 bytes to NoPreamble.txt.
'
'       Preamble has 4 bytes
'       Wrote 236 bytes to Preamble.txt.

Ayrıca konsol penceresinde komutunu fc kullanarak dosyaları karşılaştırabilir veya dosyaları Onaltılık Görünüm modu içeren bir metin düzenleyicisinde inceleyebilirsiniz. Dosya UTF-32'yi destekleyen bir düzenleyicide açıldığında BOM'un görüntülenmediğini unutmayın.

Açıklamalar

UTF32Encoding nesnesi, kodlama işleminden kaynaklanan bayt dizisine ön ek olarak ekleyebileceğiniz bir bayt dizisi olan bir ön bilgi sağlayabilir. Kodlanmış bayt dizisini bayt sırası işaretiyle (kod noktaları U+0000 U+FEFF) önceden kodlamak, kod çözücüye bayt sırasını ve dönüştürme biçimini veya UTF'yi belirlemeye yardımcı olur. Unicode bayt sırası işareti (BOM) aşağıdaki gibi serileştirilir (onaltılık olarak):

  • Büyük endian bayt sırası: 00 00 FE FF

  • Küçük endian bayt sırası: FF FE 00 00

Yöntemi geçerli bir ürün reçetesi döndüren GetPreamble bir UTF32Encoding nesnenin örneğini aşağıdaki yollarla oluşturabilirsiniz:

Ürün reçetesini kullanmanızı öneririz; aksi takdirde nesneye başvuru UTF32Encoding 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 diğer verileri olmadığında depolanan rastgele metin dosyaları. Veriler tutarlı ve düzgün etiketlenmişse genellikle kullanıcı sorunlarından kaçınılabilir.

Kodlama türü sağlayan standartlar için BOM 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çetesi 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.

Önemli

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. Yöntemin bir ürün reçetesini GetBytes kodlanmış bayt dizisine eklemediğini unutmayın; uygun bayt akışının başında bir BOM sağlamak geliştiricinin sorumluluğundadır.

Şunlara uygulanır