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í posloupnost 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í posloupnost bajtů, která určuje použité kódování.
nebo
Bajtová matice nulové délky, pokud preambule není vyžadována.
Příklady
Následující příklad určuje pořadí bajtů kódování na základě preambule.
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 Encoding poskytuje preambuli, která je polem bajtů, která může být předponou posloupnosti bajtů vyplývajících z procesu kódování. Pokud preambule obsahuje znak pořadí bajtů (v kódování Unicode, bod kódu U+FEFF), pomůže dekodér určit pořadí bajtů a formát transformace nebo UTF.
Znak pořadí bajtů Unicode (BOM) je serializován následujícím způsobem (v šestnáctkové soustavě):
UTF-8: EF BB BF
Pořadí velkých bajtů UTF-16: FE FF
UTF-16 little endian byte order: FF FE
UTF-32 big endian byte order: 00 00 FE FF
UTF-32 little endian byte order: FF FE 00 00
Kusovník byste měli použít, protože poskytuje téměř určitou identifikaci kódování souborů, 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é v případě, že firma neměla mezinárodní obavy nebo jiná data. Problémy uživatelů se často můžou vyhnout, pokud jsou data konzistentně a správně označená, nejlépe v UTF-8 nebo UTF-16.
Pro standardy, které poskytují typ kódování, je kusovník poněkud redundantní. Dá se ale použít k tomu, aby server posílal správnou hlavičku kódování. Alternativně se dá použít jako záložní v případě, že se kódování jinak ztratí.
Používání 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é. Zřetězení souborů může být také problém, například když se soubory sloučí tak, aby nepotřebný znak mohl skončit uprostřed dat. I přes několik nevýhod se však důrazně doporučuje použití kusovníku.
Další informace o pořadí bajtů a značce pořadí bajtů naleznete v tématu Standard Unicode na domovské stránce Unicode.
Caution
Chcete-li zajistit, aby kódované bajty byly dekódovány správně, měli byste předkódovat bajty s preambuli. Většina kódování však neposkytuje preambuli. Chcete-li zajistit, aby kódované bajty byly dekódovány správně, měli byste použít kódování Unicode, to znamená UTF8Encoding, , nebo UnicodeEncodingUTF32Encoding, s preambuli.