У меня есть данные в байтовом массиве, который использует кодировку UTF8 и представлен значениями от 0 до 255. Как преобразовать эти данные в исходную форму? - PullRequest
0 голосов
/ 19 марта 2019

Вот байтовые данные Я пытался использовать .ConverttoBase64 и ASCII.Ниже приведен фрагмент кода:

response.ContentEncoding = System.Text.Encoding.ASCII;
string s = response.ContentEncoding.GetString(fileBytes);` 

Данные поступают с сервера отчетов

byte[] reportBytes = reportViewer.ServerReport.Render(
    reportType, deviceInfo, 
    out mimeType, out encoding, out fileNameExtension, out streamids, out warnings);

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Значения от 0 до 255 являются байтами.Символы в вашем тексте представлены в байтах.Существует много разных кодировок, для преобразования символов в байты и наоборот.UTF-8 является одним из наиболее используемых в наши дни.Если текст кодируется с использованием кодировки UTF-8, вам также следует декодировать его с использованием кодировки UTF-8.

Таким образом, предполагая, что fileBytes представляет собой byte[], содержащий кодированный в UTF-8 текст:

string text = System.Text.Encoding.UTF8.GetString(fileBytes)
0 голосов
/ 19 марта 2019

Вы можете просто

File.WriteAllBytes(reportBytes, $"My Report{fileNameExtension}");

и зависеть от ассоциации файлов операционной системы, которая будет достаточна при открытии файла.

Вы также можете использовать mimeType для интерпретации байтов.Если это «application / vnd.openxmlformats-officedocument.spreadsheetml.sheet», вы можете обработать байты с помощью библиотеки API OpenXML, такой как библиотека OpenXML или ClosedXML или EPPlus.

Или вы можете выполнить рендеринг встраница с элементом управления WebForms ReportViewer .

0 голосов
/ 19 марта 2019

Если ваш байтовый массив является представлением строки UTF8, ваш код работает неправильно, так как вы используете простую кодировку ASCII, которая по-разному обрабатывает эти символы в пределах определенного порога (общие точки кода ниже 0x7F).

Вы читаете строку UTF8 из байтового массива следующим образом:

string text = System.Text.Encoding.UTF8.GetString(bytes);

и вы конвертируете обратно

var bytes = System.Text.Encoding.UTF8.GetBytes(text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...