Encoding.GetPreamble Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Při přepsání v odvozené třídě vrátí sekvenci bajtů, která určuje použité kódování.
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()
Návraty
Bajtové pole obsahující sekvenci bajtů, která určuje použité kódování.
-nebo-
Pole bajtů o délce nula, pokud se nevyžaduje preambule.
Příklady
Následující příklad určuje pořadí bajtů kódování na základě preambule.
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 contain a 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 contain a 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.
'
Poznámky
Volitelně objekt poskytuje preambuli, Encoding což je pole bajtů, které může být předponou sekvence bajtů vyplývající z procesu kódování. Pokud preambule obsahuje značku pořadí bajtů (v Kódování Unicode, bod kódu U+FEFF), pomůže dekodéru určit pořadí bajtů a formát transformace nebo UTF.
Značka pořadí bajtů (BOM) unicode je serializována takto (v šestnáctkové soustavě):
UTF-8: EF BB BF
Pořadí bajtů big endian UTF-16: FE FF
UTF-16 little endian byte order: FF FE
Pořadí bajtů big endian UTF-32: 00 00 FE FF
UTF-32 little endian byte order:FF FE 00 00
Měli byste použít kusovník, protože poskytuje téměř určitou identifikaci kódování pro soubory, které jinak ztratily odkaz na Encoding objekt, například neoznačené nebo nesprávně označené webové data nebo náhodné textové soubory uložené, když firma neměla mezinárodní záležitosti nebo jiná data. Uživatelským problémům se často dá předejít, pokud jsou data trvale a správně označená, nejlépe v UTF-8 nebo UTF-16.
U standardů, které poskytují typ kódování, je kusovník poněkud redundantní. Lze ji však použít k tomu, aby serveru pomohla odeslat správnou hlavičku kódování. Případně ji můžete použít jako záložní řešení pro případ, že by se kódování jinak ztratilo.
Použití kusovníku má určité nevýhody. Například znalost omezení databázových polí, která používají kusovník, může být obtížné. Problémem může být také zřetězení souborů, například když se soubory sloučí tak, že nepotřebný znak může skončit uprostřed dat. I přes několik nevýhod se však použití kusovníku důrazně doporučuje.
Další informace o pořadí bajtů a značce pořadí bajtů najdete v tématu Standard Unicode na domovské stránce sady Unicode.
Upozornění
Abyste zajistili správné dekódování zakódovaných bajtů, měli byste před zakódované bajty zadat preambuli. Většina kódování však neobsahuje preambuli. Pokud chcete zajistit správné dekódování zakódovaných bajtů, měli byste použít kódování Unicode, UTF8Encodingtedy , UnicodeEncodingnebo UTF32Encoding, s preambuli.