из строки в byte[]
От: Аноним  
Дата: 01.02.08 12:49
Оценка:
добрый день
такой вопрос: есть строка в кодировке UTF8, которая получена путем кодирования контента файла Encoding.UTF8.GetString(). Как из этой строки получить исходный массив byte[] ?
Re: из строки в byte[]
От: GlebZ Россия  
Дата: 01.02.08 12:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>добрый день

А>такой вопрос: есть строка в кодировке UTF8, которая получена путем кодирования контента файла Encoding.UTF8.GetString(). Как из этой строки получить исходный массив byte[] ?
Encoding.UTF8.GetBytes()
Re: из строки в byte[]
От: _Morpheus_  
Дата: 01.02.08 12:54
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>добрый день

А>такой вопрос: есть строка в кодировке UTF8, которая получена путем кодирования контента файла Encoding.UTF8.GetString(). Как из этой строки получить исходный массив byte[] ?

Encoding.UTF8.GetBytes
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: из строки в byte[]
От: Аноним  
Дата: 01.02.08 12:55
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Аноним, Вы писали:


А>>добрый день

А>>такой вопрос: есть строка в кодировке UTF8, которая получена путем кодирования контента файла Encoding.UTF8.GetString(). Как из этой строки получить исходный массив byte[] ?
GZ>Encoding.UTF8.GetBytes()

не пойдет:
byte[] d1 = File.ReadAllBytes( string.Format( "picture.gif" ));
string s = Encoding.UTF8.GetString( d1 );
byte[] d2 = Encoding.UTF8.GetBytes( s );

после этого d2 != d1
Re[3]: из строки в byte[]
От: _Morpheus_  
Дата: 01.02.08 13:00
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>после этого d2 != d1


конечно, потому что d2 это другой экземпляр массива, но их содержимое (d1 и d2) будет одинаковым...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[4]: из строки в byte[]
От: Аноним  
Дата: 01.02.08 13:01
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>Здравствуйте, <Аноним>, Вы писали:


А>>после этого d2 != d1


_M_>конечно, потому что d2 это другой экземпляр массива, но их содержимое (d1 и d2) будет одинаковым...


хорошо, уточню.. у этих массивов разная длина, причем существенно разная
Re[5]: из строки в byte[]
От: michael_srv  
Дата: 01.02.08 13:05
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, _Morpheus_, Вы писали:


_M_>>Здравствуйте, <Аноним>, Вы писали:


А>>>после этого d2 != d1


_M_>>конечно, потому что d2 это другой экземпляр массива, но их содержимое (d1 и d2) будет одинаковым...


А>хорошо, уточню.. у этих массивов разная длина, причем существенно разная


естественно d2 будет больше, это же _ЗАКОДИРОВАННЫЙ_ по UTF8 массив d1
Re[3]: из строки в byte[]
От: GlebZ Россия  
Дата: 01.02.08 13:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>не пойдет:

А>
А>byte[] d1 = File.ReadAllBytes( string.Format( "picture.gif" ));
А>string s = Encoding.UTF8.GetString( d1 );
А>byte[] d2 = Encoding.UTF8.GetBytes( s );
А>

А>после этого d2 != d1
Прикольно. Ты уверен что такая трансформация обязательно коммутативна тем более что она при GetString не всегда должна давать верный результат?
Как ты проверяешь на равенство?
Re[5]: из строки в byte[]
От: _Morpheus_  
Дата: 01.02.08 13:07
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>>>после этого d2 != d1


_M_>>конечно, потому что d2 это другой экземпляр массива, но их содержимое (d1 и d2) будет одинаковым...


А>хорошо, уточню.. у этих массивов разная длина, причем существенно разная



видимо в исходном файле неправильная кодировка UTF8, при декодировании недопустимые символы скипаются, вот и длина разная...

Судя по имени файла, скорее всего у тебя файл не содержит данных в формате UTF8, думаю даже более того он вообще не текстовый ... в этом вся и причина...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[6]: из строки в byte[]
От: Аноним  
Дата: 01.02.08 13:10
Оценка:
Здравствуйте, michael_srv, Вы писали:

_>естественно d2 будет больше, это же _ЗАКОДИРОВАННЫЙ_ по UTF8 массив d1


так и я про то.. как раскодировать, вот вопрос
Re[6]: из строки в byte[]
От: _Morpheus_  
Дата: 01.02.08 13:11
Оценка:
Здравствуйте, michael_srv, Вы писали:

А>>>>после этого d2 != d1


_M_>>>конечно, потому что d2 это другой экземпляр массива, но их содержимое (d1 и d2) будет одинаковым...


А>>хорошо, уточню.. у этих массивов разная длина, причем существенно разная


_>естественно d2 будет больше, это же _ЗАКОДИРОВАННЫЙ_ по UTF8 массив d1



результат будет одинаковый, потому что d2 это строка s формате UTF8, которая в свою очередь является содержимым d1. При условии что d1 содержит корректный (правильный) UTF8, я думаю что у автора последнее условие не соблюдается, он видимо скармливает UTF8.GetString недопустимую для UTF8 последовательность...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[5]: из строки в byte[]
От: GlebZ Россия  
Дата: 01.02.08 13:11
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>хорошо, уточню.. у этих массивов разная длина, причем существенно разная

Не стоит присобачивать алгоритм к тому, к чему он не предназначен. Вероятнее всего у него и должна быть разная длина, поскольку в бинарных данных не учитывается особенности UTF8. Эти декодеры предназначены только для правильной текстовой информации. Для перевода любых бинарных данных в каналы которые передают только текст используйте Base64 (Convert.ToBase64String etc)
Re[7]: из строки в byte[]
От: _Morpheus_  
Дата: 01.02.08 13:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

_>>естественно d2 будет больше, это же _ЗАКОДИРОВАННЫЙ_ по UTF8 массив d1


А>так и я про то.. как раскодировать, вот вопрос



а ты уверен что в файле у тебя действительно текст и причем текст действительно в формате UTF8?
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[5]: из строки в byte[]
От: Malleus Maleficarum  
Дата: 01.02.08 13:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>хорошо, уточню.. у этих массивов разная длина, причем существенно разная


Значит исходный файл "picture.gif" содержит данные, которые не могут быть корректно представлены в UTF-8. Что неудивительно, поскольку (судя по расширению) исходный файл — бинарный.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.