UTF32Encoding.GetString(Byte[], Int32, Int32) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bayt dizisinden dizeye bayt aralığının kodunu çözer.
public:
override System::String ^ GetString(cli::array <System::Byte> ^ bytes, int index, int count);
public override string GetString (byte[] bytes, int index, int count);
override this.GetString : byte[] * int * int -> string
Public Overrides Function GetString (bytes As Byte(), index As Integer, count As Integer) As String
Parametreler
- bytes
- Byte[]
Kod çözme bayt sırasını içeren bayt dizisi.
- index
- Int32
Kodu çözecek ilk bayt dizini.
- count
- Int32
Kodu çözecek bayt sayısı.
Döndürülenler
Belirtilen bayt dizisinin kodunu çözmenin sonuçlarını içeren bir dize.
Özel durumlar
bytes
, null
değeridir.
index
veya count
sıfırdan küçüktür.
-veya-
index
ve count
içinde bytes
geçerli bir aralığı ifade etmeyin.
Hata algılama etkinleştirildi ve bytes
geçersiz bayt dizisi içeriyor.
Geri dönüş oluştu (daha fazla bilgi için tam bir açıklama için bkz . .NET'te Karakter Kodlaması ).
-Ve-
DecoderFallback olarak ayarlanır DecoderExceptionFallback.
Örnekler
Aşağıdaki örnek, bir dizeyi biri küçük endian, diğeri büyük endian sırada olmak üzere iki bayt dizisine kodlar. Ardından baytların kodunu bir dizeye geri çözer.
using System;
using System.Text;
public class Example
{
public static void Main()
{
// Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
UTF32Encoding u32LE = new UTF32Encoding(false, true, true);
UTF32Encoding u32BE = new UTF32Encoding(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 str = "za\u0306\u01FD\u03B2";
// barrBE uses the big-endian byte order.
byte[] barrBE = new byte[u32BE.GetByteCount(str)];
u32BE.GetBytes(str, 0, str.Length, barrBE, 0);
// barrLE uses the little-endian byte order.
byte[] barrLE = new byte[u32LE.GetByteCount(str)];
u32LE.GetBytes(str, 0, str.Length, barrLE, 0);
// Decode the byte arrays.
Console.WriteLine("BE array with BE encoding:");
DisplayString(barrBE, u32BE);
Console.WriteLine();
Console.WriteLine("LE array with LE encoding:");
DisplayString(barrLE, u32LE);
Console.WriteLine();
// Decode the byte arrays using an encoding with a different byte order.
Console.WriteLine("BE array with LE encoding:");
try {
DisplayString(barrBE, u32LE);
}
catch (System.ArgumentException e) {
Console.WriteLine(e.Message);
}
Console.WriteLine();
Console.WriteLine("LE array with BE encoding:");
try {
DisplayString(barrLE, u32BE);
}
catch (ArgumentException e) {
Console.WriteLine(e.Message);
}
Console.WriteLine();
}
public static void DisplayString(byte[] bytes, Encoding enc)
{
// Display the name of the encoding used.
Console.Write("{0,-25}: ", enc.ToString());
// Decode the bytes and display the characters.
Console.WriteLine(enc.GetString(bytes, 0, bytes.Length));
}
}
// This example displays the following output:
// BE array with BE encoding:
// System.Text.UTF32Encoding: zăǽβ
//
// LE array with LE encoding:
// System.Text.UTF32Encoding: zăǽβ
//
// BE array with LE encoding:
// System.Text.UTF32Encoding: Unable to translate bytes [00][00][00][7A] at index 0 from specified code page to Unicode.
//
// LE array with BE encoding:
// System.Text.UTF32Encoding: Unable to translate bytes [7A][00][00][00] at index 0 from specified code page to Unicode.
Imports System.Text
Public Module Example
Public Sub Main()
' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
Dim u32LE As New UTF32Encoding(False, True, True)
Dim u32BE As New UTF32Encoding(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 str As String = "za" + ChrW(&h0306) + ChrW(&h01FD) + ChrW(&h03B2)
' barrBE uses the big-endian byte order.
Dim barrBE(u32BE.GetByteCount(str) - 1) As Byte
u32BE.GetBytes(str, 0, str.Length, barrBE, 0)
' barrLE uses the little-endian byte order.
Dim barrLE(u32LE.GetByteCount(str) - 1) As Byte
u32LE.GetBytes(str, 0, str.Length, barrLE, 0)
' Decode the byte arrays.
Console.WriteLine("BE array with BE encoding:")
DisplayString(barrBE, u32BE)
Console.WriteLine()
Console.WriteLine("LE array with LE encoding:")
DisplayString(barrLE, u32LE)
Console.WriteLine()
' Decode the byte arrays using an encoding with a different byte order.
Console.WriteLine("BE array with LE encoding:")
Try
DisplayString(barrBE, u32LE)
Catch e As ArgumentException
Console.WriteLine(e.Message)
End Try
Console.WriteLine()
Console.WriteLine("LE array with BE encoding:")
Try
DisplayString(barrLE, u32BE)
Catch e As ArgumentException
Console.WriteLine(e.Message)
End Try
Console.WriteLine()
End Sub
Public Sub DisplayString(bytes As Byte(), enc As Encoding )
' Display the name of the encoding used.
Console.Write("{0,-25}: ", enc.ToString())
' Decode the bytes and display the characters.
Console.WriteLine(enc.GetString(bytes, 0, bytes.Length))
End Sub
End Module
' This example displays the following output:
' BE array with BE encoding:
' System.Text.UTF32Encoding: zăǽβ
'
' LE array with LE encoding:
' System.Text.UTF32Encoding: zăǽβ
'
' BE array with LE encoding:
' System.Text.UTF32Encoding: Unable to translate bytes [00][00][00][7A] at index 0 from specified code page to Unicode.
'
' LE array with BE encoding:
' System.Text.UTF32Encoding: Unable to translate bytes [7A][00][00][00] at index 0 from specified code page to Unicode.
Aşağıdaki örnek, kodlanmış bir dize için tam olarak kaç bayt gerektiğini belirlemek için yöntemini çağırarak GetByteCount ve ardından bayt sırası işaretinin (BOM) boyutunu ekleyerek bir dizi başlatır. Örnek daha sonra kodlanmış baytları diziye depolamak için yöntemini çağırmadan GetBytes önce bom'u diziye depolama yöntemini çağırırGetPreamble. Örnek daha sonra dizenin GetString kodunu çözmek için yöntemini çağırır.
using System;
using System.Text;
public class Example
{
public static void Main()
{
var utf32 = new UTF32Encoding(! BitConverter.IsLittleEndian, true);
String s = "It was the best of times, it was the worst of times...";
// We need to dimension the array, since we'll populate it with 2 method calls.
Byte[] bytes = new Byte[utf32.GetByteCount(s) + utf32.GetPreamble().Length];
// Encode the string.
Array.Copy(utf32.GetPreamble(), bytes, utf32.GetPreamble().Length);
utf32.GetBytes(s, 0, s.Length, bytes, utf32.GetPreamble().Length);
// Decode the byte array.
String s2 = utf32.GetString(bytes, 0, bytes.Length);
Console.WriteLine(s2);
}
}
// The example displays the following output:
// ?It was the best of times, it was the worst of times...
Imports System.Text
Module Example
Public Sub Main()
Dim utf32 As New UTF32Encoding(Not BitConverter.IsLittleEndian, True)
Dim s As String = "It was the best of times, it was the worst of times..."
' We need to dimension the array, since we'll populate it with 2 method calls.
Dim bytes(utf32.GetByteCount(s) + utf32.GetPreamble().Length - 1) As Byte
' Encode the string.
Array.Copy(utf32.GetPreamble(), bytes, utf32.GetPreamble().Length)
utf32.GetBytes(s, 0, s.Length, bytes, utf32.GetPreamble().Length)
' Decode the byte array.
Dim s2 As String = utf32.GetString(bytes, 0, bytes.Length)
Console.WriteLine(s2)
End Sub
End Module
' The example displays the following output:
' ?It was the best of times, it was the worst of times...
Bu durumda, kodu çözülen dizenin özgün dizeden farklı olduğunu unutmayın, çünkü 32 bit bayt sırası işaretiyle başlar U+FFFE U+0000. Başka bir deyişle, iki dize eşit değil olarak karşılaştırılır ve dize çıktı ise, ürün reçetesinin "?" değiştirme karakteri olarak görüntüleneceği anlamına gelir.
Açıklamalar
Hata algılama ile geçersiz bir sıra bu yöntemin bir ArgumentExceptionoluşturmasına neden olur. Hata algılama olmadan geçersiz diziler yoksayılır ve özel durum oluşmaz.
Kodu çözülecek bayt aralığı bayt sırası işaretini (BOM) içeriyorsa ve bayt dizisi bom olmayan bir tür yöntemi tarafından döndürüldüyse, U+FFFE karakteri bu yöntem tarafından döndürülen karakter dizisine eklenir. yöntemini çağırarak String.TrimStart kaldırabilirsiniz.
Akıştan okunan veriler gibi dönüştürülecek veriler yalnızca sıralı bloklarda kullanılabilir. Bu durumda veya veri miktarı daha küçük bloklara bölünmesi gereken kadar büyükse, uygulama sırasıyla yöntemi veya GetEncoder yöntemi tarafından GetDecoder sağlanan öğesini Encoder kullanmalıdırDecoder.