Aracılığıyla paylaş


UTF8Encoding.GetPreamble Yöntem

Tanım

Kodlama nesnesi bir tane sağlamak üzere yapılandırılmışsa UTF8Encoding UTF-8 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[]

Kodlama nesnesi bir tane sağlayacak şekilde yapılandırılmışsa UTF8Encoding 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 örnek, UTF-8 biçiminde kodlanmış Unicode bayt sırası işaretini döndürmek için yöntemini kullanır GetPreamble . parametresiz UTF8Encoding oluşturucusunun bir ön derleme sağlamadığını unutmayın.

using namespace System;
using namespace System::Text;
using namespace System::Collections;

void ShowArray(array<Byte>^ bytes)
{
   for each (Byte b in bytes)
      Console::Write( "{0:X2} ", b);

   Console::WriteLine();
}

int main()
{
   // The default constructor does not provide a preamble.
   UTF8Encoding^ UTF8NoPreamble = gcnew UTF8Encoding;
   UTF8Encoding^ UTF8WithPreamble = gcnew UTF8Encoding( true );
   array<Byte>^preamble;
   preamble = UTF8NoPreamble->GetPreamble();
   Console::WriteLine( "UTF8NoPreamble" );
   Console::WriteLine( " preamble length: {0}", preamble->Length );
   Console::Write( " preamble: " );
   ShowArray( preamble );
   Console::WriteLine();
   
   preamble = UTF8WithPreamble->GetPreamble();
   Console::WriteLine( "UTF8WithPreamble" );
   Console::WriteLine( " preamble length: {0}", preamble->Length );
   Console::Write( " preamble: " );
   ShowArray( preamble );
}
// The example displays the following output:
//       UTF8NoPreamble
//        preamble length: 0
//        preamble:
//
//       UTF8WithPreamble
//        preamble length: 3
//        preamble: EF BB BF
using System;
using System.Text;

class Example
{
    public static void Main()
    {
        // The default constructor does not provide a preamble.
        UTF8Encoding UTF8NoPreamble = new UTF8Encoding();
        UTF8Encoding UTF8WithPreamble = new UTF8Encoding(true);

        Byte[] preamble;

        preamble = UTF8NoPreamble.GetPreamble();
        Console.WriteLine("UTF8NoPreamble");
        Console.WriteLine(" preamble length: {0}", preamble.Length);
        Console.Write(" preamble: ");
        ShowArray(preamble);
        Console.WriteLine();
        
        preamble = UTF8WithPreamble.GetPreamble();
        Console.WriteLine("UTF8WithPreamble");
        Console.WriteLine(" preamble length: {0}", preamble.Length);
        Console.Write(" preamble: ");
        ShowArray(preamble);
    }

    public static void ShowArray(Byte[] bytes)
    {
        foreach (var b in bytes)
            Console.Write("{0:X2} ", b);

        Console.WriteLine();
    }
}
// The example displays the following output:
//    UTF8NoPreamble
//     preamble length: 0
//     preamble:
//
//    UTF8WithPreamble
//     preamble length: 3
//     preamble: EF BB BF
Imports System.Text

Module Example
    Public Sub Main()
        ' The default constructor does not provide a preamble.
        Dim UTF8NoPreamble As New UTF8Encoding()
        Dim UTF8WithPreamble As New UTF8Encoding(True)
        
        Dim preamble() As Byte
        
        preamble = UTF8NoPreamble.GetPreamble()
        Console.WriteLine("UTF8NoPreamble")
        Console.WriteLine(" preamble length: {0}", preamble.Length)
        Console.Write(" preamble: ")
        ShowArray(preamble)
        Console.WriteLine()
        
        preamble = UTF8WithPreamble.GetPreamble()
        Console.WriteLine("UTF8WithPreamble")
        Console.WriteLine(" preamble length: {0}", preamble.Length)
        Console.Write(" preamble: ")
        ShowArray(preamble)
    End Sub

    Public Sub ShowArray(bytes As Byte())
        For Each b In  bytes
            Console.Write("{0:X2} ", b)
        Next
        Console.WriteLine()
    End Sub
End Module
' The example displays the following output:
'    UTF8NoPreamble
'     preamble length: 0
'     preamble:
'
'    UTF8WithPreamble
'     preamble length: 3
'     preamble: EF BB BF

Aşağıdaki örnek, ilki bir BOM sağlamayan parametresiz UTF8Encoding() oluşturucuyu çağırarak, ikincisi ise bağımsız değişkeni olarak ayarlanmış oluşturucuyu encoderShouldEmitUTF8Identifier çağırarak iki UTF8Encoding nesnenin UTF8Encoding(Boolean) örneğini trueoluşturur. Ardından UF8 ile kodlanmış bir dize yazmadan önce bom dosyasını bir dosyaya yazmak için yöntemini çağırır GetPreamble . Örnekteki konsol çıkışında gösterildiği gibi, ikinci kodlayıcıdan baytları kaydeden dosyanın ilkinden üç bayt daha fazla olur.

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-8 encoding.";

      // Write a file using the default constructor without a BOM.
      var enc = new UTF8Encoding();
      Byte[] bytes = enc.GetBytes(s);
      WriteToFile("NoPreamble.txt", enc, bytes);

      // Use BOM.
      enc = new UTF8Encoding(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 57 bytes to NoPreamble.txt.
//
//       Preamble has 3 bytes
//       Wrote 60 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-8 encoding."
      
      ' Write a file using the default constructor without a BOM.
      Dim enc As New UTF8Encoding()
      Dim bytes() As Byte = enc.GetBytes(s)
      WriteToFile("NoPreamble.txt", enc, bytes)

      ' Use BOM.
      enc = New UTF8Encoding(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 57 bytes to NoPreamble.txt.
'
'       Preamble has 3 bytes
'       Wrote 60 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-8'i destekleyen bir düzenleyicide açıldığında BOM'un görüntülenmediğini unutmayın.

Açıklamalar

UTF8Encoding 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 noktası 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) 0xEF 0xBB 0xBF olarak seri hale getirilir. Unicode Standardının UTF-8 kodlu akışlar için bir BOM kullanılmasını gerektirmediğini veya önermediğini unutmayın.

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

  • özelliği tarafından Encoding.UTF8 döndürülen nesneyi alarakUTF8Encoding.

  • Parametresi olan encoderShouldEmitUTF8Identifier bir UTF8Encoding oluşturucuyu çağırarak ve değerini olarak ayarlayaraktrue.

Diğer UTF8Encoding tüm nesneler geçerli bir ürün reçetesi yerine boş bir dizi döndürecek şekilde yapılandırılır.

BOM, etiketlenmemiş veya yanlış etiketlenmiş web verileri ya da bir işletmenin uluslararası kaygıları olmadığında depolanan rastgele metin dosyaları gibi kodlama başvurularını kaybetmiş dosyalar için neredeyse belirli bir kodlama tanımlaması sağlar. 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 dosya veya akış olarak kaydedildiğinde doğru şekilde kodunun çözülmesini sağlamak için, kodlanmış bayt akışının başına ön ek olarak bir ön ek ekleyebilirsiniz. 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