共用方式為


UnicodeEncoding.GetString Method

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Decodes a range of bytes from a byte array into a string.

Namespace:  System.Text
Assembly:  mscorlib (in mscorlib.dll)

Syntax

'Declaration
<SecuritySafeCriticalAttribute> _
<ComVisibleAttribute(False)> _
Public Overrides Function GetString ( _
    bytes As Byte(), _
    index As Integer, _
    count As Integer _
) As String
[SecuritySafeCriticalAttribute]
[ComVisibleAttribute(false)]
public override string GetString(
    byte[] bytes,
    int index,
    int count
)

Parameters

  • bytes
    Type: array<System.Byte[]
    The byte array containing the sequence of bytes to decode.
  • index
    Type: System.Int32
    The zero-based index of the first byte to decode.

Return Value

Type: System.String
A string object that contains the results of decoding the specified sequence of bytes.

Exceptions

Exception Condition
ArgumentNullException

bytes is null (Nothing).

ArgumentOutOfRangeException

index or count is less than zero.

-or-

index and count do not denote a valid range in bytes.

ArgumentException

Error detection is enabled, and bytes contains an invalid sequence of bytes.

DecoderFallbackException

A fallback occurred (see Understanding Encodings for fuller explanation).

Remarks

With error detection, an invalid sequence causes this method to throw a ArgumentException. Without error detection, invalid sequences are ignored, and no exception is thrown.

Data to be converted, such as data read from a stream, might be available only in sequential blocks. In this case, or if the amount of data is so large that it needs to be divided into smaller blocks, the application should use the Decoder or the Encoder object provided by the GetDecoder or the GetEncoder method, respectively.

Examples

The following code example encodes a string into an array of bytes, and then decodes the bytes back into a string.

Imports System.Text

Public Class Example

   Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)

      ' Create two instances of UnicodeEncoding: one with little-endian byte order and one with big-endian byte order.
      Dim u16LE As New UnicodeEncoding(False, True, True)
      Dim u16BE As New UnicodeEncoding(True, True, True)


      ' Create byte arrays from the same string containing the following characters:
      '    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)
      Dim myStr As String = "za" & ChrW(&H306) & ChrW(&H1FD) & ChrW(&H3B2)

      ' barrBE uses the big-endian byte order.
      ' NOTE: In Visual Basic, arrays contain one extra element by default.
      '       The following line creates an array with the exact number of elements required.
      Dim barrBE(u16BE.GetByteCount(myStr) - 1) As Byte
      u16BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)

      ' barrLE uses the little-endian byte order.
      ' NOTE: In Visual Basic, arrays contain one extra element by default.
      '       The following line creates an array with the exact number of elements required.
      Dim barrLE(u16LE.GetByteCount(myStr) - 1) As Byte
      u16LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)


      ' Decode the byte arrays.
      outputBlock.Text &= "BE array with BE encoding : "
      PrintDecodedString(outputBlock, barrBE, u16BE)
      outputBlock.Text &= "LE array with LE encoding : "
      PrintDecodedString(outputBlock, barrLE, u16LE)


      ' Decode the byte arrays using an encoding with a different byte order.
      outputBlock.Text &= "BE array with LE encoding : "
      Try
         PrintDecodedString(outputBlock, barrBE, u16LE)
      Catch e As System.ArgumentException
         outputBlock.Text &= e.Message & vbCrLf
      End Try

      outputBlock.Text &= "LE array with BE encoding : "
      Try
         PrintDecodedString(outputBlock, barrLE, u16BE)
      Catch e As System.ArgumentException
         outputBlock.Text &= e.Message & vbCrLf
      End Try

   End Sub 'Main


   Public Shared Sub PrintDecodedString(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal bytes() As Byte, ByVal enc As Encoding)

      ' Display the name of the encoding used.
      outputBlock.Text += String.Format("{0,-25} :", enc.ToString())

      ' Decode the bytes and display the characters.
      outputBlock.Text += String.Format(enc.GetString(bytes, 0, bytes.Length)) & vbCrLf

   End Sub 'PrintDecodedString 

End Class 'SamplesUnicodeEncoding

using System;
using System.Text;

public class Example
{

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {

      // Create two instances of UnicodeEncoding: one with little-endian byte order and one with big-endian byte order.
      UnicodeEncoding u16LE = new UnicodeEncoding(false, true, true);
      UnicodeEncoding u16BE = new UnicodeEncoding(true, true, true);


      // Create byte arrays from the same string containing the following characters:
      //    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)
      String myStr = "za\u0306\u01FD\u03B2";

      // barrBE uses the big-endian byte order.
      byte[] barrBE = new byte[u16BE.GetByteCount(myStr)];
      u16BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0);

      // barrLE uses the little-endian byte order.
      byte[] barrLE = new byte[u16LE.GetByteCount(myStr)];
      u16LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0);


      // Decode the byte arrays.
      outputBlock.Text += "BE array with BE encoding : ";
      PrintDecodedString(outputBlock, barrBE, u16BE);
      outputBlock.Text += "LE array with LE encoding : ";
      PrintDecodedString(outputBlock, barrLE, u16LE);


      // Decode the byte arrays using an encoding with a different byte order.
      outputBlock.Text += "BE array with LE encoding : ";
      try
      {
         PrintDecodedString(outputBlock, barrBE, u16LE);
      }
      catch (System.ArgumentException e)
      {
         outputBlock.Text += e.Message + "\n";
      }

      outputBlock.Text += "LE array with BE encoding : ";
      try
      {
         PrintDecodedString(outputBlock, barrLE, u16BE);
      }
      catch (System.ArgumentException e)
      {
         outputBlock.Text += e.Message + "\n";
      }

   }


   public static void PrintDecodedString(System.Windows.Controls.TextBlock outputBlock, byte[] bytes, Encoding enc)
   {

      // Display the name of the encoding used.
      outputBlock.Text += String.Format("{0,-25} :", enc.ToString());

      // Decode the bytes and display the characters.
      outputBlock.Text += String.Format(enc.GetString(bytes, 0, bytes.Length)) + "\n";

   }

}

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.