Сохраните строку двоичных данных в байтовом массиве, используя c # - PullRequest
0 голосов
/ 06 мая 2011

У меня есть веб-сервис, который возвращает двоичные данные в виде строки.Используя код C #, как я могу сохранить его в байтовом массиве?Это правильный путь?

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(inputString);

На самом деле, это не сработало.Позвольте мне объяснить это подробнее: код веб-службы преобразует строку (содержащую данные XSLFO) в байтовый массив с использованием кодировки utf8.В своем ответе веб-службы я вижу только данные, подобные "PGZvOnJvb3QgeG1sbnM6Zm89Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML0Zvcm1hdCIgeG1sbnM­6eGY9Imh0dHA6Ly93d3cuZWNyaW9uLmNvbS94Zi8xLjAiIHhtbG5zOm1zeHNsPSJ1c==".На самом деле я хотел бы иметь оригинальное строковое значение, которое было преобразовано в byte [] в службе.Не уверен, если это возможно?

Ответы [ 2 ]

12 голосов
/ 06 мая 2011

Нет, это плохая идея.

Если входные данные не были первоначально текстом, попытка использовать Encoding - плохая идея.Веб-сервис должен использовать что-то вроде base64 для кодирования - в этот момент вы можете использовать Convert.FromBase64String, чтобы вернуть исходные двоичные данные.

По сути, обрабатывать произвольные двоичные данные, как если быэто был закодированный текст - быстрый способ потерять данные.Когда вам нужно представить двоичные данные в строке, вы должны использовать base64, hex или что-то подобное.

Это, конечно, может означать, что вам также нужно изменить веб-сервис - если он создает строку простоОбрабатывая двоичные данные как текст в кодировке UTF-8, они начинаются с нуля.

0 голосов
/ 06 мая 2011

Если строка закодирована в кодировке UTF8, то да, это правильный путь. Если это в Unicode, это очень похоже:

System.Text.Unicode encoding = new System.Text.Unicode();
byte[] bytes = encoding.GetBytes(inputString);

Base64Encoding немного отличается:

byte[] bytes = Convert.FromBase64String(inputString);
...