Encoding.BigEndianUnicode プロパティ

定義

ビッグ エンディアンのバイト順を使用する UTF-16 形式のエンコーディングを取得します。

public:
 static property System::Text::Encoding ^ BigEndianUnicode { System::Text::Encoding ^ get(); };
public static System.Text.Encoding BigEndianUnicode { get; }
member this.BigEndianUnicode : System.Text.Encoding
Public Shared ReadOnly Property BigEndianUnicode As Encoding

プロパティ値

Encoding

ビッグ エンディアンのバイト順を使用する UTF-16 形式のエンコーディング オブジェクト。

次の例では、ビッグエンディアンのバイト順を使用して、UTF-16 エンコードを使用してテキストファイルを読み取ります。

using namespace System;
using namespace System::IO;
int main()
{
   
   // Read a text file saved with Big Endian Unicode encoding.
   System::Text::Encoding^ encoding = System::Text::Encoding::BigEndianUnicode;
   StreamReader^ reader = gcnew StreamReader( "TextFile.txt",encoding );
   String^ line = reader->ReadLine();
   while ( line != nullptr )
   {
      Console::WriteLine( line );
      line = reader->ReadLine();
   }
}
using System;
using System.IO;

namespace BigEndianExample
{
   public class Class1 
   {
      public static void Main(string[] args) 
      {
         // Read a text file saved with Big Endian Unicode encoding.
         System.Text.Encoding encoding = System.Text.Encoding.BigEndianUnicode;
         StreamReader reader = new StreamReader("TextFile.txt", encoding);
         string line = reader.ReadLine();
         while (line != null) 
         {
            Console.WriteLine(line);
            line = reader.ReadLine();
         }
       }
    }
}
Imports System.IO

Namespace BigEndianExample
   Public Class Class1
      Public Overloads Shared Sub Main()
         ' Read a text file saved with Big Endian Unicode encoding.
         Dim encoding As System.Text.Encoding = System.Text.Encoding.BigEndianUnicode
         Dim reader As New StreamReader("TextFile.txt", encoding)
         Dim line As String = reader.ReadLine()
         While Not (line Is Nothing)
            Console.WriteLine(line)
            line = reader.ReadLine()
         End While
      End Sub
   End Class
End Namespace

次の例では、文字配列をエンコードし、文字をエンコードし、結果のバイトを表示するために必要なバイト数を決定します。

using namespace System;
using namespace System::Text;
void PrintCountsAndBytes( array<Char>^chars, Encoding^ enc );
void PrintHexBytes( array<Byte>^bytes );
int main()
{
   
   // The characters to encode:
   //    Latin Small Letter Z (U+007A)
   //    Latin Small Letter A (U+0061)
   //    Combining Breve (U+0306)
   //    Latin Small Letter AE With Acute (U+01FD)
   //    Greek Small Letter Beta (U+03B2)
   //    a high-surrogate value (U+D8FF)
   //    a low-surrogate value (U+DCFF)
   array<Char>^myChars = gcnew array<Char>{
      L'z','a',L'\u0306',L'\u01FD',L'\u03B2',L'\xD8FF',L'\xDCFF'
   };
   
   // Get different encodings.
   Encoding^ u7 = Encoding::UTF7;
   Encoding^ u8 = Encoding::UTF8;
   Encoding^ u16LE = Encoding::Unicode;
   Encoding^ u16BE = Encoding::BigEndianUnicode;
   Encoding^ u32 = Encoding::UTF32;
   
   // Encode the entire array, and print out the counts and the resulting bytes.
   PrintCountsAndBytes( myChars, u7 );
   PrintCountsAndBytes( myChars, u8 );
   PrintCountsAndBytes( myChars, u16LE );
   PrintCountsAndBytes( myChars, u16BE );
   PrintCountsAndBytes( myChars, u32 );
}

void PrintCountsAndBytes( array<Char>^chars, Encoding^ enc )
{
   
   // Display the name of the encoding used.
   Console::Write( "{0,-30} :", enc );
   
   // Display the exact byte count.
   int iBC = enc->GetByteCount( chars );
   Console::Write( " {0,-3}", iBC );
   
   // Display the maximum byte count.
   int iMBC = enc->GetMaxByteCount( chars->Length );
   Console::Write( " {0,-3} :", iMBC );
   
   // Encode the array of chars.
   array<Byte>^bytes = enc->GetBytes( chars );
   
   // Display all the encoded bytes.
   PrintHexBytes( bytes );
}

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 code produces the following output.

System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/
using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // The characters to encode:
      //    Latin Small Letter Z (U+007A)
      //    Latin Small Letter A (U+0061)
      //    Combining Breve (U+0306)
      //    Latin Small Letter AE With Acute (U+01FD)
      //    Greek Small Letter Beta (U+03B2)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode the entire array, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, u7 );
      PrintCountsAndBytes( myChars, u8 );
      PrintCountsAndBytes( myChars, u16LE );
      PrintCountsAndBytes( myChars, u16BE );
      PrintCountsAndBytes( myChars, u32 );
   }

   public static void PrintCountsAndBytes( char[] chars, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-30} :", enc.ToString() );

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( chars );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( chars.Length );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the array of chars.
      byte[] bytes = enc.GetBytes( chars );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );
   }

   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 code produces the following output.

System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' The characters to encode:
      '    Latin Small Letter Z (U+007A)
      '    Latin Small Letter A (U+0061)
      '    Combining Breve (U+0306)
      '    Latin Small Letter AE With Acute (U+01FD)
      '    Greek Small Letter Beta (U+03B2)
      '    a high-surrogate value (U+D8FF)
      '    a low-surrogate value (U+DCFF)
      Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF)}
 

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = Encoding.UTF32

      ' Encode the entire array, and print out the counts and the resulting bytes.
      PrintCountsAndBytes(myChars, u7)
      PrintCountsAndBytes(myChars, u8)
      PrintCountsAndBytes(myChars, u16LE)
      PrintCountsAndBytes(myChars, u16BE)
      PrintCountsAndBytes(myChars, u32)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, enc As Encoding)

      ' Display the name of the encoding used.
      Console.Write("{0,-30} :", enc.ToString())

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(chars)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(chars.Length)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the array of chars.
      Dim bytes As Byte() = enc.GetBytes(chars)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   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 code produces the following output.
'
'System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
'System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

注釈

UnicodeEncodingこのプロパティによって返されるオブジェクトに、アプリに対する適切な動作がない可能性があります。 この例では、置換フォールバックを使用して、エンコードできない各文字列と、デコードできない各バイトを疑問符 ("?") 文字で置き換えます。 代わりに、 UnicodeEncoding.UnicodeEncoding(Boolean, Boolean, Boolean) 次の例に示すように、コンストラクターを呼び出し UnicodeEncoding て、フォールバックが EncoderFallbackException またはのいずれかであるビッグエンディアンオブジェクトをインスタンス化することができ DecoderFallbackException ます。

using System;
using System.Text;

public class Example
{
   public static void Main()
   {
      byte[] bytes = { 0x00, 0x20, 0xd8, 0x01, 0x00, 0x68, 0xA7, 0x00 };
      Encoding enc = new UnicodeEncoding(true, true, true);
      
      try {
         string value = enc.GetString(bytes);
         Console.WriteLine();
         Console.WriteLine("'{0}'", value);
      }
      catch (DecoderFallbackException e) {      
         Console.WriteLine("Unable to decode {0} at index {1}", 
                           ShowBytes(e.BytesUnknown), e.Index);
      }
   }

   private static string ShowBytes(byte[] bytes) 
   {
      string returnString = null;
      foreach (var byteValue in bytes)
         returnString += String.Format("0x{0:X2} ", byteValue);

      return returnString.Trim();
   }
}
// The example displays the following output:
//        Unable to decode 0xD8 0x01 at index 4
Imports System.Text

Module Example
   Public Sub Main()
      Dim bytes() As Byte = { &h00, &h20, &hd8, &h01, &h00, &h68, &hA7, &h00}
      Dim enc As Encoding = New UnicodeEncoding(True, True, True)
      
      Try
         Dim value As String = enc.GetString(bytes)
         Console.WriteLine()
         Console.WriteLine("'{0}'", value)
      Catch e As DecoderFallbackException      
         Console.WriteLine("Unable to decode {0} at index {1}", 
                           ShowBytes(e.BytesUnknown), e.Index)
      End Try
   End Sub
   
   Private Function ShowBytes(bytes As Byte()) As String
      Dim returnString As String = Nothing
      For Each byteValue In bytes
         returnString += String.Format("0x{0:X2} ", byteValue)
      Next
      Return returnString.Trim()
   End Function
End Module
' The example displays the following output:
'       Unable to decode 0xD8 0x01 at index 4

返される UnicodeEncoding オブジェクトには BodyName 、、、およびの各プロパティがあり、 HeaderName WebName "unicodeFFFE" という名前が生成されます。 UTF-16 ビッグエンディアンバイト順マークは16進 FEFF ですが、"unicodeFFFE" という名前が選択されました。これは、バイト順マークがリトルエンディアン Windows コンピューター上の16進 FFFE として表示されるためです。

適用対象

こちらもご覧ください