2015-08-31 4 views
0

Я пытаюсь преобразовать байт [] blob в базу данных MSSQL в формат ANSI-1252 с использованием C# и Microsoft Lightswitch и вернуть результаты в файл загрузки.Преобразование байта [] - Array в ANSI

Это то, что я думал, что должно работать ...

Я создаю строку с

System.Text.Encoding v_Unicode = System.Text.Encoding.Unicode; 
System.Text.Encoding v_ANSI_Windows_1252 = System.Text.Encoding.GetEncoding(1252); 

string v_Content_1252 = v_ANSI_Windows_1252.GetString(System.Text.Encoding.Convert(v_Unicode, v_ANSI_Windows_1252, v_Unicode.GetBytes(v_Content))); 
byte[] ansiArray = v_ANSI_Windows_1252.GetBytes(v_Content_1252); 

и записать его в базе данных. Когда я пытаюсь получить с

int v_fileId = Int32.Parse(context.Request.QueryString["p_FileId"]); 

DataTableName v_fexpd = serverContext.DataWorkspace.ApplicationData.DataTableName_SingleOrDefault(v_fileId); 
MemoryStream memStream = new MemoryStream(v_fexpd.Inhalt); 

string v_Content= System.Text.Encoding.GetEncoding(1252).GetString(v_fexpd.Content); 

context.Response.Clear(); 
context.Response.ContentType = "text/csv"; 
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + v_fexpd.Filename); 
context.Response.Write(v_Content); 
context.Response.End(); 

... но он просто возвращает Юникод. Что я делаю не так?

+1

Содержимое 'string' всегда будет UTF16. 'System.Text.Encoding.GetEncoding (1252) .GetString (v_fexpd.Content);' будет считывать данные из 'v_fexpd.Content', обрабатывая его как ANSI и преобразуя его в UTF16. –

+0

Значит, мне не так просто получить этот байтовый массив там как ANSI? – ty812

+1

Ну не 'v_fexpd.Content' массив байтов, который вы хотите? –

ответ

0

Это для тех, кто имеет аналогичную проблему. Ответ заключается в том, чтобы пройти через поток ... Что я сделал:

// Create a temporary file, delete if it already exists 
string MyFile = Path.GetTempPath() + v_fexpd.Dateiname; 
if (File.Exists(MyFile)) { 
    File.Delete(MyFile); 
} 

using (TextWriter tw = new StreamWriter(MyFile.ToString(), true, System.Text.Encoding.GetEncoding(1252))) 
    tw.WriteLine(v_Inhalt); 

context.Response.Clear(); 
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + v_fexpd.Dateiname); 
context.Response.AddHeader("Content-Type", "text/csv; charset=windows-1252"); 

// Write the file - which at this point is correctly-encoded - 
// directly into the output. 
context.Response.WriteFile(MyFile); 

context.Response.End(); 

// Leave no traces 
File.Delete(MyFile); 
Смежные вопросы