Mam plik SQL dodany do mojego projektu VS.NET 2008 jako zasób osadzony. Ilekroć używam następującego kodu do odczytania zawartości pliku, zwracany ciąg zawsze zaczyna się trzema znakami śmieciowymi, a następnie tekstem, którego oczekuję. Zakładam, że ma to coś wspólnego z Encoding.Default, którego używam, ale to tylko odgadnięcie. Dlaczego ten tekst pojawia się? Czy powinienem po prostu odciąć pierwsze trzy znaki, czy też istnieje bardziej świadome podejście?Dlaczego tekst z Assembly.GetManifestResourceStream() zaczyna się od trzech znaków śmieci?
public string GetUpdateRestoreSchemaScript()
{
var type = GetType();
var a = Assembly.GetAssembly(type);
var script = "UpdateRestoreSchema.sql";
var resourceName = String.Concat(type.Namespace, ".", script);
using(Stream stream = a.GetManifestResourceStream(resourceName))
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
// UPDATE: Should be Encoding.UTF8
return Encoding.Default.GetString(buffer);
}
}
Aktualizacja: Teraz wiem, że mój kod działa zgodnie z oczekiwaniami, jeśli po prostu zmienić ostatni wiersz, aby powrócić do UTF-8 zakodowany ciąg. To zawsze będzie prawdziwe dla tego pliku osadzonego, ale czy zawsze będzie to prawda? Czy istnieje sposób przetestowania dowolnego bufora w celu ustalenia jego kodowania?
Czy istnieje sposób na przetestowanie kodowania? Ponieważ nie określiłem kodowania podczas zapisywania pliku, założyłem, że jest to ustawienie domyślne. – flipdoubt
Domyślne kodowanie w różnych edytorach nie jest takie samo. –