Encoding.GetPreamble メソッド

定義

派生クラスでオーバーライドされた場合、使用するエンコーディングを指定するバイト シーケンスを返します。When overridden in a derived class, returns a sequence of bytes that specifies the encoding used.

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

戻り値

Byte[]

使用するエンコーディングを指定するバイト シーケンスを格納するバイト配列。A byte array containing a sequence of bytes that specifies the encoding used.

または-or-

プリアンブルが不要な場合は、長さ 0 のバイト配列。A byte array of length zero, if a preamble is not required.

次の例では、プリアンブルに基づくエンコードのバイト順を決定します。The following example determines the byte order of the encoding based on the preamble.

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

/*
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 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.");
            }
         }
      }
   }
}

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

注釈

必要に応じて、Encoding オブジェクトは、エンコード処理によって生成されるバイトシーケンスにプレフィックスを付けることができるバイト配列であるプリアンブルを提供します。Optionally, the Encoding object provides a preamble that is an array of bytes that can be prefixed to the sequence of bytes resulting from the encoding process. プリアンブルにバイト順マーク (Unicode、コードポイント U + FEFF) が含まれている場合は、デコーダーがバイト順と変換形式または UTF を決定するのに役立ちます。If the preamble contains a byte order mark (in Unicode, code point U+FEFF), it helps the decoder determine the byte order and the transformation format or UTF.

Unicode バイト順マーク (BOM) は、次のようにシリアル化されます (16 進数)。The Unicode byte order mark (BOM) is serialized as follows (in hexadecimal):

  • UTF-8: EF BB BFUTF-8: EF BB BF

  • UTF-16 ビッグエンディアンバイト順: FE FFUTF-16 big endian byte order: FE FF

  • UTF-16 リトルエンディアンバイト順: FF FEUTF-16 little endian byte order: FF FE

  • 32 UTF-8 ビッグエンディアンバイト順:00 00 FE FFUTF-32 big endian byte order: 00 00 FE FF

  • 32 UTF-8 リトルエンディアンバイト順: FF FE 00 00UTF-32 little endian byte order: FF FE 00 00

BOM を使用する必要があります。これは、Encoding オブジェクトへの参照が失われたファイル (タグなしまたは不適切なタグが付けられた web データや、ビジネスで国際的な問題や他のデータがない場合に保存されたランダムなテキストファイルなど) について、ほとんど特定のエンコードを識別できるためです。You should use the BOM, because it provides nearly certain identification of an encoding for files that otherwise have lost reference to the Encoding object, for example, untagged or improperly tagged web data or random text files stored when a business did not have international concerns or other data. データが一貫して適切にタグ付けされている場合 (UTF-8 または UTF-16 の場合)、ユーザーの問題が回避されることがよくあります。Often user problems might be avoided if data is consistently and properly tagged, preferably in UTF-8 or UTF-16.

エンコードの種類を提供する標準の場合、BOM はやや冗長です。For standards that provide an encoding type, a BOM is somewhat redundant. ただし、このメソッドを使用して、サーバーが正しいエンコードヘッダーを送信できるようにすることができます。However, it can be used to help a server send the correct encoding header. または、エンコードが失われた場合にフォールバックとして使用することもできます。Alternatively, it can be used as a fallback in case the encoding is otherwise lost.

BOM の使用にはいくつかの欠点があります。There are some disadvantages to using a BOM. たとえば、BOM を使用するデータベースフィールドを制限する方法を理解することは困難です。For example, knowing how to limit the database fields that use a BOM can be difficult. ファイルの連結も問題になることがあります。たとえば、不要な文字がデータの途中で終了するような方法でファイルをマージする場合などです。Concatenation of files can be a problem also, for example, when files are merged in such a way that an unnecessary character can end up in the middle of data. ただし、いくつかの欠点がありますが、BOM を使用することを強くお勧めします。In spite of the few disadvantages, however, the use of a BOM is highly recommended.

バイト順とバイト順マークの詳細については、unicodeホームページの unicode 標準を参照してください。For more information on byte order and the byte order mark, see The Unicode Standard at the Unicode home page.

注意事項

エンコードされたバイトが正しくデコードされるようにするには、エンコードされたバイトをプリアンブルでプレフィックスとして付ける必要があります。To ensure that the encoded bytes are decoded properly, you should prefix encoded bytes with a preamble. ただし、ほとんどのエンコーディングではプリアンブルが提供されません。However, most encodings do not provide a preamble. エンコードされたバイトが正しくデコードされるようにするには、Unicode エンコーディング (つまり、UTF8EncodingUnicodeEncoding、または UTF32Encoding) をプリアンブルで使用する必要があります。To ensure that the encoded bytes are decoded properly, you should use a Unicode encoding, that is, UTF8Encoding, UnicodeEncoding, or UTF32Encoding, with a preamble.

適用対象