Encoding.GetByteCount Metod

Definition

När du åsidosättas i en härledd klass beräknar du antalet byte som genereras genom att koda en uppsättning tecken.

Överlagringar

Name Description
GetByteCount(String, Int32, Int32)

När du åsidosättas i en härledd klass beräknar du antalet byte som genereras genom att koda en uppsättning tecken från den angivna strängen.

GetByteCount(Char[], Int32, Int32)

När det åsidosättas i en härledd klass beräknas antalet byte som genereras genom att koda en uppsättning tecken från den angivna teckenmatrisen.

GetByteCount(Char*, Int32)

När du åsidosättas i en härledd klass beräknar du antalet byte som genereras genom att koda en uppsättning tecken med början vid den angivna teckenpekaren.

GetByteCount(String)

När det åsidosättas i en härledd klass beräknas antalet byte som genereras genom att koda tecknen i den angivna strängen.

GetByteCount(ReadOnlySpan<Char>)

När det åsidosättas i en härledd klass beräknas antalet byte som genereras genom att koda tecknen i det angivna teckenintervallet.

GetByteCount(Char[])

När det åsidosättas i en härledd klass beräknas antalet byte som skapas genom att koda alla tecken i den angivna teckenmatrisen.

GetByteCount(String, Int32, Int32)

När du åsidosättas i en härledd klass beräknar du antalet byte som genereras genom att koda en uppsättning tecken från den angivna strängen.

public:
 int GetByteCount(System::String ^ s, int index, int count);
public int GetByteCount(string s, int index, int count);
member this.GetByteCount : string * int * int -> int
Public Function GetByteCount (s As String, index As Integer, count As Integer) As Integer

Parametrar

s
String

Strängen som innehåller den uppsättning tecken som ska kodas.

index
Int32

Indexet för det första tecknet som ska kodas.

count
Int32

Antalet tecken som ska kodas.

Returer

Antalet byte som genereras genom kodning av strängen.

Exempel

I följande exempel fastställs antalet byte som krävs för att koda tre tecken från en teckenmatris, kodar tecknen och visar resulterande byte.

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 three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, 4, 3, u7 );
      PrintCountsAndBytes( myChars, 4, 3, u8 );
      PrintCountsAndBytes( myChars, 4, 3, u16LE );
      PrintCountsAndBytes( myChars, 4, 3, u16BE );
      PrintCountsAndBytes( myChars, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( char[] chars, int index, int count, 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, index, count );
      Console.Write( " {0,-3}", iBC );

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

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

      // The following is an alternative way to encode the array of chars:
      // byte[] bytes = new byte[iBC];
      // enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );

      // 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       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :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 three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes(myChars, 4, 3, u7)
      PrintCountsAndBytes(myChars, 4, 3, u8)
      PrintCountsAndBytes(myChars, 4, 3, u16LE)
      PrintCountsAndBytes(myChars, 4, 3, u16BE)
      PrintCountsAndBytes(myChars, 4, 3, u32)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, 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, index, count)
      Console.Write(" {0,-3}", iBC)

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

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

      ' The following is an alternative way to encode the array of chars:
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      ' Dim bytes(iBC - 1) As Byte
      ' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )

      ' 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       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Kommentarer

Om du vill beräkna den exakta matrisstorlek som krävs för GetBytes att lagra de resulterande byteen GetByteCount anropar du metoden. Anropa metoden för att beräkna den maximala matrisstorleken GetMaxByteCount . Metoden GetByteCount tillåter vanligtvis allokering av mindre minne, medan GetMaxByteCount metoden vanligtvis körs snabbare.

Metoden GetByteCount avgör hur många byte som resulterar i kodning av en uppsättning Unicode-tecken och GetBytes metoden utför den faktiska kodningen. Metoden GetBytes förväntar sig diskreta konverteringar, till skillnad från Encoder.GetBytes metoden, som hanterar flera konverteringar på en enda indataström.

Flera versioner av GetByteCount och GetBytes stöds. Följande är några programmeringsöverväganden för användning av dessa metoder:

  • Din app kan behöva koda många indatatecken till en kodsida och bearbeta tecknen med hjälp av flera anrop. I det här fallet måste du förmodligen underhålla tillståndet mellan anropen, med hänsyn till det tillstånd som behålls av det Encoder objekt som används.

  • Om appen hanterar strängindata rekommenderas strängversionen av GetBytes .

  • Unicode-teckenbuffertversionen GetBytes(Char*, Int32, Byte*, Int32) av tillåter vissa snabba tekniker, särskilt med flera anrop som använder Encoder objektet eller infogar i befintliga buffertar. Tänk dock på att den här metodversionen ibland är osäker, eftersom pekare krävs.

  • Om din app måste konvertera en stor mängd data bör den återanvända utdatabufferten. I det här fallet är den GetBytes version som stöder bytematriser det bästa valet.

  • Överväg att Encoder.Convert använda metoden i stället GetByteCountför . Konverteringsmetoden konverterar så mycket data som möjligt och utlöser ett undantag om utdatabufferten är för liten. För kontinuerlig kodning av en ström är den här metoden ofta det bästa valet.

Gäller för

GetByteCount(Char[], Int32, Int32)

När det åsidosättas i en härledd klass beräknas antalet byte som genereras genom att koda en uppsättning tecken från den angivna teckenmatrisen.

public:
 abstract int GetByteCount(cli::array <char> ^ chars, int index, int count);
public abstract int GetByteCount(char[] chars, int index, int count);
abstract member GetByteCount : char[] * int * int -> int
Public MustOverride Function GetByteCount (chars As Char(), index As Integer, count As Integer) As Integer

Parametrar

chars
Char[]

Teckenmatrisen som innehåller den uppsättning tecken som ska kodas.

index
Int32

Indexet för det första tecknet som ska kodas.

count
Int32

Antalet tecken som ska kodas.

Returer

Antalet byte som genereras genom kodning av de angivna tecknen.

Undantag

chars är null.

index eller count är mindre än noll.

-eller-

index och count ange inte ett giltigt intervall i chars.

En reserv inträffade (mer information finns i Character Encoding i .NET)

-och-

EncoderFallback är inställt på EncoderExceptionFallback.

Exempel

I följande exempel fastställs antalet byte som krävs för att koda tre tecken från en teckenmatris, kodar tecknen och visar resulterande byte.

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 three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, 4, 3, u7 );
      PrintCountsAndBytes( myChars, 4, 3, u8 );
      PrintCountsAndBytes( myChars, 4, 3, u16LE );
      PrintCountsAndBytes( myChars, 4, 3, u16BE );
      PrintCountsAndBytes( myChars, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( char[] chars, int index, int count, 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, index, count );
      Console.Write( " {0,-3}", iBC );

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

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

      // The following is an alternative way to encode the array of chars:
      // byte[] bytes = new byte[iBC];
      // enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) );

      // 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       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :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 three characters starting at index 4, and print out the counts and the resulting bytes.
      PrintCountsAndBytes(myChars, 4, 3, u7)
      PrintCountsAndBytes(myChars, 4, 3, u8)
      PrintCountsAndBytes(myChars, 4, 3, u16LE)
      PrintCountsAndBytes(myChars, 4, 3, u16BE)
      PrintCountsAndBytes(myChars, 4, 3, u32)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, index As Integer, count As Integer, 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, index, count)
      Console.Write(" {0,-3}", iBC)

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

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

      ' The following is an alternative way to encode the array of chars:
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      ' Dim bytes(iBC - 1) As Byte
      ' enc.GetBytes( chars, index, count, bytes, bytes.GetLowerBound(0) )

      ' 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       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Kommentarer

Om du vill beräkna den exakta matrisstorlek som krävs för GetBytes att lagra de resulterande byteen GetByteCount anropar du metoden. Anropa metoden för att beräkna den maximala matrisstorleken GetMaxByteCount . Metoden GetByteCount tillåter vanligtvis allokering av mindre minne, medan GetMaxByteCount metoden vanligtvis körs snabbare.

Metoden GetByteCount avgör hur många byte som resulterar i kodning av en uppsättning Unicode-tecken och GetBytes metoden utför den faktiska kodningen. Metoden GetBytes förväntar sig diskreta konverteringar, till skillnad från Encoder.GetBytes metoden, som hanterar flera konverteringar på en enda indataström.

Flera versioner av GetByteCount och GetBytes stöds. Följande är några programmeringsöverväganden för användning av dessa metoder:

  • Din app kan behöva koda många indatatecken till en kodsida och bearbeta tecknen med hjälp av flera anrop. I det här fallet måste du förmodligen underhålla tillståndet mellan anropen, med hänsyn till det tillstånd som behålls av det Encoder objekt som används.

  • Om appen hanterar strängindata rekommenderas strängversionen av GetBytes .

  • Unicode-teckenbuffertversionen GetBytes(Char*, Int32, Byte*, Int32) av tillåter vissa snabba tekniker, särskilt med flera anrop som använder Encoder objektet eller infogar i befintliga buffertar. Tänk dock på att den här metodversionen ibland är osäker, eftersom pekare krävs.

  • Om din app måste konvertera en stor mängd data bör den återanvända utdatabufferten. I det här fallet är den GetBytes version som stöder bytematriser det bästa valet.

  • Överväg att Encoder.Convert använda metoden i stället GetByteCountför . Konverteringsmetoden konverterar så mycket data som möjligt och utlöser ett undantag om utdatabufferten är för liten. För kontinuerlig kodning av en ström är den här metoden ofta det bästa valet.

Se även

Gäller för

GetByteCount(Char*, Int32)

Viktigt!

Detta API uppfyller inte CLS.

När du åsidosättas i en härledd klass beräknar du antalet byte som genereras genom att koda en uppsättning tecken med början vid den angivna teckenpekaren.

public:
 virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
[System.Runtime.InteropServices.ComVisible(false)]
public virtual int GetByteCount(char* chars, int count);
[System.CLSCompliant(false)]
public virtual int GetByteCount(char* chars, int count);
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int
[<System.CLSCompliant(false)>]
abstract member GetByteCount : nativeptr<char> * int -> int
override this.GetByteCount : nativeptr<char> * int -> int

Parametrar

chars
Char*

En pekare till det första tecknet som ska kodas.

count
Int32

Antalet tecken som ska kodas.

Returer

Antalet byte som genereras genom kodning av de angivna tecknen.

Attribut

Undantag

chars är null.

count är mindre än noll.

En reserv inträffade (mer information finns i Character Encoding i .NET)

-och-

EncoderFallback är inställt på EncoderExceptionFallback.

Kommentarer

Om du vill beräkna den exakta matrisstorlek som GetBytes krävs för att lagra de resulterande byteen bör du anropa GetByteCount metoden. Anropa metoden för att beräkna den maximala matrisstorleken GetMaxByteCount . Metoden GetByteCount tillåter vanligtvis allokering av mindre minne, medan GetMaxByteCount metoden vanligtvis körs snabbare.

Metoden GetByteCount(Char*, Int32) avgör hur många byte som resulterar i kodning av en uppsättning Unicode-tecken och GetBytes(Char*, Int32, Byte*, Int32) metoden utför den faktiska kodningen. Metoden GetBytes förväntar sig diskreta konverteringar, till skillnad från Encoder.GetBytes metoden, som hanterar flera konverteringar på en enda indataström.

Flera versioner av GetByteCount och GetBytes stöds. Följande är några saker att tänka på när du använder dessa metoder:

  • Din app kan behöva koda många indatatecken till en kodsida och bearbeta tecknen med flera anrop. I det här fallet måste du förmodligen underhålla tillståndet mellan anropen, med hänsyn till det tillstånd som behålls av det Encoder objekt som används.

  • Om din app hanterar strängindata bör du använda strängversionen av GetBytes metoden.

  • Unicode-teckenbuffertversionen GetBytes av tillåter vissa snabba tekniker, särskilt med flera anrop som använder Encoder objektet eller infogar i befintliga buffertar. Tänk dock på att den här metodversionen ibland är osäker, eftersom pekare krävs.

  • Om din app måste konvertera en stor mängd data bör den återanvända utdatabufferten. I det här fallet är den GetBytes version som stöder bytematriser det bästa valet.

  • Överväg att Encoder.Convert använda metoden i stället GetByteCountför . Konverteringsmetoden konverterar så mycket data som möjligt och utlöser ett undantag om utdatabufferten är för liten. För kontinuerlig kodning av en ström är den här metoden ofta det bästa valet.

Se även

Gäller för

GetByteCount(String)

När det åsidosättas i en härledd klass beräknas antalet byte som genereras genom att koda tecknen i den angivna strängen.

public:
 virtual int GetByteCount(System::String ^ s);
public virtual int GetByteCount(string s);
abstract member GetByteCount : string -> int
override this.GetByteCount : string -> int
Public Overridable Function GetByteCount (s As String) As Integer

Parametrar

s
String

Strängen som innehåller den uppsättning tecken som ska kodas.

Returer

Antalet byte som genereras genom kodning av de angivna tecknen.

Undantag

s är null.

En reserv inträffade (mer information finns i Character Encoding i .NET)

-och-

EncoderFallback är inställt på EncoderExceptionFallback.

Exempel

I följande exempel fastställs antalet byte som krävs för att koda en sträng eller ett intervall i strängen, kodar tecknen och visar resulterande byte.

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)
      String myStr = "za\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 string, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the entire string:" );
      PrintCountsAndBytes( myStr, u7 );
      PrintCountsAndBytes( myStr, u8 );
      PrintCountsAndBytes( myStr, u16LE );
      PrintCountsAndBytes( myStr, u16BE );
      PrintCountsAndBytes( myStr, u32 );

      Console.WriteLine();

      // Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine( "Encoding the characters from index 4 through 6:" );
      PrintCountsAndBytes( myStr, 4, 3, u7 );
      PrintCountsAndBytes( myStr, 4, 3, u8 );
      PrintCountsAndBytes( myStr, 4, 3, u16LE );
      PrintCountsAndBytes( myStr, 4, 3, u16BE );
      PrintCountsAndBytes( myStr, 4, 3, u32 );
   }

   public static void PrintCountsAndBytes( String s, Encoding enc )  {

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

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

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

      // Encode the entire string.
      byte[] bytes = enc.GetBytes( s );

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

   public static void PrintCountsAndBytes( String s, int index, int count, Encoding enc )  {

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

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

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

      // Encode a range of characters in the string.
      byte[] bytes = new byte[iBC];
      enc.GetBytes( s, index, count, bytes, bytes.GetLowerBound(0) );

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

Encoding the entire string:
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

Encoding the characters from index 4 through 6:
System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 8   16  :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 myStr As String = "za" & 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 string, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the entire string:")
      PrintCountsAndBytes(myStr, u7)
      PrintCountsAndBytes(myStr, u8)
      PrintCountsAndBytes(myStr, u16LE)
      PrintCountsAndBytes(myStr, u16BE)
      PrintCountsAndBytes(myStr, u32)

      Console.WriteLine()

      ' Encode three characters starting at index 4, and print out the counts and the resulting bytes.
      Console.WriteLine("Encoding the characters from index 4 through 6:")
      PrintCountsAndBytes(myStr, 4, 3, u7)
      PrintCountsAndBytes(myStr, 4, 3, u8)
      PrintCountsAndBytes(myStr, 4, 3, u16LE)
      PrintCountsAndBytes(myStr, 4, 3, u16BE)
      PrintCountsAndBytes(myStr, 4, 3, u32)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, 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(s)
      Console.Write(" {0,-3}", iBC)

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

      ' Encode the entire string.
      Dim bytes As Byte() = enc.GetBytes(s)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Overloads Public Shared Sub PrintCountsAndBytes(s As String, index As Integer, count As Integer, 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(s.ToCharArray(), index, count)
      Console.Write(" {0,-3}", iBC)

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

      ' Encode a range of characters in the string.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      Dim bytes(iBC - 1) As Byte
      enc.GetBytes(s, index, count, bytes, bytes.GetLowerBound(0))

      ' 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.
'
'Encoding the entire string:
'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
'
'Encoding the characters from index 4 through 6:
'System.Text.UTF7Encoding       : 10  11  :2B 41 37 4C 59 2F 39 7A 2F 2D
'System.Text.UTF8Encoding       : 6   12  :CE B2 F1 8F B3 BF
'System.Text.UnicodeEncoding    : 6   8   :B2 03 FF D8 FF DC
'System.Text.UnicodeEncoding    : 6   8   :03 B2 D8 FF DC FF
'System.Text.UTF32Encoding      : 8   16  :B2 03 00 00 FF FC 04 00

Kommentarer

Om du vill beräkna den exakta matrisstorlek som krävs för GetBytes att lagra de resulterande byteen GetByteCount anropar du metoden. Anropa metoden för att beräkna den maximala matrisstorleken GetMaxByteCount . Metoden GetByteCount tillåter vanligtvis allokering av mindre minne, medan GetMaxByteCount metoden vanligtvis körs snabbare.

Metoden GetByteCount avgör hur många byte som resulterar i kodning av en uppsättning Unicode-tecken och GetBytes metoden utför den faktiska kodningen. Metoden GetBytes förväntar sig diskreta konverteringar, till skillnad från Encoder.GetBytes metoden, som hanterar flera konverteringar på en enda indataström.

Flera versioner av GetByteCount och GetBytes stöds. Följande är några programmeringsöverväganden för användning av dessa metoder:

  • Din app kan behöva koda många indatatecken till en kodsida och bearbeta tecknen med hjälp av flera anrop. I det här fallet måste du förmodligen underhålla tillståndet mellan anropen, med hänsyn till det tillstånd som behålls av det Encoder objekt som används.

  • Om appen hanterar strängindata rekommenderas strängversionen av GetBytes .

  • Unicode-teckenbuffertversionen GetBytes(Char*, Int32, Byte*, Int32) av tillåter vissa snabba tekniker, särskilt med flera anrop som använder Encoder objektet eller infogar i befintliga buffertar. Tänk dock på att den här metodversionen ibland är osäker, eftersom pekare krävs.

  • Om din app måste konvertera en stor mängd data bör den återanvända utdatabufferten. I det här fallet är den GetBytes version som stöder bytematriser det bästa valet.

  • Överväg att Encoder.Convert använda metoden i stället GetByteCountför . Konverteringsmetoden konverterar så mycket data som möjligt och utlöser ett undantag om utdatabufferten är för liten. För kontinuerlig kodning av en ström är den här metoden ofta det bästa valet.

Se även

Gäller för

GetByteCount(ReadOnlySpan<Char>)

När det åsidosättas i en härledd klass beräknas antalet byte som genereras genom att koda tecknen i det angivna teckenintervallet.

public:
 virtual int GetByteCount(ReadOnlySpan<char> chars);
public virtual int GetByteCount(ReadOnlySpan<char> chars);
abstract member GetByteCount : ReadOnlySpan<char> -> int
override this.GetByteCount : ReadOnlySpan<char> -> int
Public Overridable Function GetByteCount (chars As ReadOnlySpan(Of Char)) As Integer

Parametrar

chars
ReadOnlySpan<Char>

Det intervall med tecken som ska kodas.

Returer

Antalet byte som skapas genom att koda det angivna teckenintervallet.

Kommentarer

Om du vill beräkna den exakta intervallstorlek som krävs för GetBytes att lagra de resulterande byteen GetByteCount anropar du metoden. Anropa metoden för att beräkna den maximala spannsstorleken GetMaxByteCount . Metoden GetByteCount tillåter vanligtvis allokering av mindre minne, medan GetMaxByteCount metoden vanligtvis körs snabbare.

Metoden GetByteCount avgör hur många byte som resulterar i kodning av en uppsättning Unicode-tecken och GetBytes metoden utför den faktiska kodningen. Metoden GetBytes förväntar sig diskreta konverteringar, till skillnad från Encoder.GetBytes metoden, som hanterar flera konverteringar på en enda indataström.

Flera versioner av GetByteCount och GetBytes stöds. Följande är några programmeringsöverväganden för användning av dessa metoder:

  • Din app kan behöva koda många indatatecken till en kodsida och bearbeta tecknen med hjälp av flera anrop. I det här fallet måste du förmodligen underhålla tillståndet mellan anropen, med hänsyn till det tillstånd som behålls av det Encoder objekt som används.

  • Om din app hanterar intervall med teckenindata rekommenderas span-versionen av GetBytes .

  • Överväg att Encoder.Convert använda metoden i stället GetByteCountför . Konverteringsmetoden konverterar så mycket data som möjligt och utlöser ett undantag om utdataintervallbufferten är för liten. För kontinuerlig kodning av en ström är den här metoden ofta det bästa valet.

Gäller för

GetByteCount(Char[])

När det åsidosättas i en härledd klass beräknas antalet byte som skapas genom att koda alla tecken i den angivna teckenmatrisen.

public:
 virtual int GetByteCount(cli::array <char> ^ chars);
public virtual int GetByteCount(char[] chars);
abstract member GetByteCount : char[] -> int
override this.GetByteCount : char[] -> int
Public Overridable Function GetByteCount (chars As Char()) As Integer

Parametrar

chars
Char[]

Teckenmatrisen som innehåller de tecken som ska kodas.

Returer

Antalet byte som skapas genom att koda alla tecken i den angivna teckenmatrisen.

Undantag

chars är null.

En reserv inträffade (mer information finns i Character Encoding i .NET)

-och-

EncoderFallback är inställt på EncoderExceptionFallback.

Exempel

I följande exempel fastställs antalet byte som krävs för att koda en teckenmatris, kodar tecknen och visar de resulterande byteen.

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

Kommentarer

Om du vill beräkna den exakta matrisstorlek som krävs för GetBytes att lagra de resulterande byteen GetByteCount anropar du metoden. Anropa metoden för att beräkna den maximala matrisstorleken GetMaxByteCount . Metoden GetByteCount tillåter vanligtvis allokering av mindre minne, medan GetMaxByteCount metoden vanligtvis körs snabbare.

Metoden GetByteCount avgör hur många byte som resulterar i kodning av en uppsättning Unicode-tecken och GetBytes metoden utför den faktiska kodningen. Metoden GetBytes förväntar sig diskreta konverteringar, till skillnad från Encoder.GetBytes metoden, som hanterar flera konverteringar på en enda indataström.

Flera versioner av GetByteCount och GetBytes stöds. Följande är några programmeringsöverväganden för användning av dessa metoder:

  • Din app kan behöva koda många indatatecken till en kodsida och bearbeta tecknen med hjälp av flera anrop. I det här fallet måste du förmodligen underhålla tillståndet mellan anropen, med hänsyn till det tillstånd som behålls av det Encoder objekt som används.

  • Om din app hanterar strängindata bör du använda strängversionerna av GetBytes metoden.

  • Unicode-teckenbuffertversionen GetBytes(Char*, Int32, Byte*, Int32) av tillåter vissa snabba tekniker, särskilt med flera anrop som använder Encoder objektet eller infogar i befintliga buffertar. Tänk dock på att den här metodversionen ibland är osäker, eftersom pekare krävs.

  • Om din app måste konvertera en stor mängd data bör du återanvända utdatabufferten. I det här fallet är den GetBytes version som stöder bytematriser det bästa valet.

  • Överväg att Encoder.Convert använda metoden i stället GetByteCountför . Konverteringsmetoden konverterar så mycket data som möjligt och utlöser ett undantag om utdatabufferten är för liten. För kontinuerlig kodning av en ström är den här metoden ofta det bästa valet.

Se även

Gäller för