2014-02-03 5 views
0

У меня есть большой объем данных, который состоит из таблиц, шрифта, жирного шрифта, размера и т. Д. Эти данные будут храниться в байте [] в базе данных.Преобразование байта [] в строку, чтобы сохранить исходный формат байта

Когда я получаю эти данные, мне нужно преобразовать байт [] в строку, потому что мне нужно найти & вместо этой строки после преобразования этой строки в байт [], теряя исходную структуру данных, что означает, я не могу правильно видеть любые таблицы, шрифты, полужирный и т. д. Итак, как я могу найти и заменить в байте [] путем преобразования строки, а также сохранить данные в исходном формате.

+0

как вы его преобразовали? покажите свой код! – zey

+1

Каковы исходные данные? HTML? PDF? слово? или...? В основном: как именно вы получили его как 'byte []'. Как правило, процесс здесь - «десериализовать его обратно в формат orignal, манипулировать данными в исходном формате, снова сериализовать его в байт []» –

+1

Меня поражает, что кто-то, кто нуждается в ответе, не затрагивает фундаментальные вопросы в комментариях ... –

ответ

0

Попробуйте

string result = System.Text.Encoding.UTF8.GetString(byteArray) 
+1

Это делает много предположений ... во-первых, что исходные данные были на самом деле текстовыми, а во-вторых: что он был закодирован с помощью UTF-8 –

0

Для того, чтобы Byte [] в строку

byte[] byteArray = new byte[10]; // put your byte array here 
public void byteToString() 
{   
    stringTemp = ""; 
    stringTemp = BitConverter.ToString(byteArray).Replace("-", ""); 
} 

И ваши данные еще в ByteArray, .. :)

+1

Это делает предположение, что исходные данные были ' string', и дальнейшее предположение о том, что «битконвертер» использовался для сериализации данных.Лично я подозреваю, что последнее предположение ** конечно ** недействительно, но я не уверен первым. –

+0

, почему исходные данные не должны копировать в том же переменном перед редактированием. поэтому просто создайте другую временную переменную для управления исходными данными. просто сделайте байт [] temp = original []; – DennisUKSW

0

Если байт массива содержит двоичные данные и no string, попробуйте преобразовать его в base64:

Convert.ToBase64String(yourByteArray); 
+0

Это не позволит найти и заменить, что было намерением –

+0

@MarcGravell хм ... Вы правы. Мне кажется, нам не хватает важной информации здесь ... – toATwork

1

Короткий ответ не. Выясните формат данных и посмотрите, что вы можете сделать, чтобы сделать манипуляции. Если данные составляют на самом деле текст, только что сохраненный как byte[], ваш подход будет работать, если вы правильно закодируете строку (т. Е. Если ваш БД ожидает UTF-8, используйте кодировку UTF-8, если это windows-1251, используйте эту).

Если у вас есть структура, в которой часть ее является строкой, то то, что вы делаете, не может действительно хорошо работать. Во-первых, вы, вероятно, захотите изменить только соответствующие части поля. В MS SQL у вас есть удобные функции для этого. Но даже тогда вы должны знать, что на самом деле хранилось там, а не просто предположить, что замена строки будет волшебным образом работать.

Теперь взломом может быть использование явного кодирования, которое не перерывает нестроковые данные. Это будет некоторая однобайтовая кодировка, которая не делает ничего интересного. Это нормально, если вы используете одну и ту же кодировку при чтении текстовых данных, однако, если вы используете какой-либо вариант юникода, вам не повезло; из-за таких функций, как нормализация строк, вы не можете гарантировать, что то, что приходит, выходит одинаково, по-байту. В любом случае, это плохая практика.

Не забывайте, что вполне возможно, что строка, которую вы ищете, на самом деле находится где-то за пределами текстовых полей - даже по чистой случайности это может произойти, и некоторые практики делают это еще более вероятным.

Опять же: укажите формат данных внутри этого поля данных - тогда вы можете решить, как делать то, что хотите.

Смежные вопросы