Преобразование строк, содержащих непечатаемые символы

Я хотел бы преобразовать байтовый массив, содержащий непечатаемые символы, в строку для моего приложения. Когда я преобразую обратно в байтовый массив, содержимое массива должно оставаться таким же, как я обнаружил, что ASCII/Unicode/UTF8 не всегда дает мне правильное решение?

Например

 byte[] bytearray ={ 147, 35, 44, 18, 255, 104, 206, 72 ,69};

 string str = System.Text.Encoding.ASCII.GetString(bytearray);

 bytearray = System.Text.Encoding.ASCII.GetBytes(str);

В приведенном выше примере я обнаружил, что байтовый массив содержит

{ 63, 35, 44, 18, 63, 104, 63, 72 ,69}.

Пожалуйста, помогите мне.

4 ответа

Решение

Взгляните на метод Convert.ToBase64String. Он преобразует массив байтов в строку. Имейте в виду, что данные, зашифрованные в строку, займут больше места, чем ваш оригинальный байтовый массив.

public static string ToBase64String(
    byte[] inArray
)

Затем вы можете декодировать строку обратно в байтовый массив, используя FromBase64String

public static byte[] FromBase64String(
    string s
)

Я думаю, что ваша проблема в том, что вы используете неправильную кодировку. ASCII определяет 128 символов (http://en.wikipedia.org/wiki/ASCII) и поэтому никогда не даст вам байтов выше 128.

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

Кажется, я неправильно понял вопрос. Мой ответ был уместен только в том случае, если байтовый массив представлял собой закодированную строку - я не читал бит, в котором говорилось, что это непечатаемые символы и т. Д. Ответ Никола - тот, к которому нужно обратиться.:)

Использовать другую базу кодировки, поскольку ASCII изменит все непечатаемые символы на? будучи 63.

Когда строка не обязательно должна быть удобочитаемой версией не пронаблюдаемых символов, действительно преобразование ее в base64 (UUEncode/XXEncode) действительно поможет.

Используя кодировку ASCI для преобразования вашего байтового массива в строку, помните, что ASCI - это 7-битный протокол, кодировка либо обнуляет восьмой бит, либо возвращается к определенному значению (документация кажется неясной, что это делает!)

Цитировать MSDN;

До.NET Framework версии 2.0.NET Framework допускала подделку, игнорируя 8-й бит. Начиная с.NET Framework 2.0, кодовые точки, отличные от ASCII, возвращаются во время декодирования.

Другие вопросы по тегам