Преобразование строк, содержащих непечатаемые символы
Я хотел бы преобразовать байтовый массив, содержащий непечатаемые символы, в строку для моего приложения. Когда я преобразую обратно в байтовый массив, содержимое массива должно оставаться таким же, как я обнаружил, что 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, возвращаются во время декодирования.