добрый день
такой вопрос: есть строка в кодировке UTF8, которая получена путем кодирования контента файла Encoding.UTF8.GetString(). Как из этой строки получить исходный массив byte[] ?
Здравствуйте, Аноним, Вы писали:
А>добрый день А>такой вопрос: есть строка в кодировке UTF8, которая получена путем кодирования контента файла Encoding.UTF8.GetString(). Как из этой строки получить исходный массив byte[] ?
Encoding.UTF8.GetBytes()
Здравствуйте, <Аноним>, Вы писали:
А>добрый день А>такой вопрос: есть строка в кодировке 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
конечно, потому что 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) будет одинаковым...
хорошо, уточню.. у этих массивов разная длина, причем существенно разная
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, _Morpheus_, Вы писали:
_M_>>Здравствуйте, <Аноним>, Вы писали:
А>>>после этого d2 != d1
_M_>>конечно, потому что d2 это другой экземпляр массива, но их содержимое (d1 и d2) будет одинаковым...
А>хорошо, уточню.. у этих массивов разная длина, причем существенно разная
естественно d2 будет больше, это же _ЗАКОДИРОВАННЫЙ_ по UTF8 массив d1
А>byte[] d1 = File.ReadAllBytes( string.Format( "picture.gif" ));
А>string s = Encoding.UTF8.GetString( d1 );
А>byte[] d2 = Encoding.UTF8.GetBytes( s );
А>
А>после этого d2 != d1
Прикольно. Ты уверен что такая трансформация обязательно коммутативна тем более что она при GetString не всегда должна давать верный результат?
Как ты проверяешь на равенство?
Здравствуйте, <Аноним>, Вы писали:
А>>>после этого 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
Здравствуйте, michael_srv, Вы писали:
А>>>>после этого d2 != d1
_M_>>>конечно, потому что d2 это другой экземпляр массива, но их содержимое (d1 и d2) будет одинаковым...
А>>хорошо, уточню.. у этих массивов разная длина, причем существенно разная
_>естественно d2 будет больше, это же _ЗАКОДИРОВАННЫЙ_ по UTF8 массив d1
результат будет одинаковый, потому что d2 это строка s формате UTF8, которая в свою очередь является содержимым d1. При условии что d1 содержит корректный (правильный) UTF8, я думаю что у автора последнее условие не соблюдается, он видимо скармливает UTF8.GetString недопустимую для UTF8 последовательность...
Здравствуйте, Аноним, Вы писали:
А>хорошо, уточню.. у этих массивов разная длина, причем существенно разная
Не стоит присобачивать алгоритм к тому, к чему он не предназначен. Вероятнее всего у него и должна быть разная длина, поскольку в бинарных данных не учитывается особенности UTF8. Эти декодеры предназначены только для правильной текстовой информации. Для перевода любых бинарных данных в каналы которые передают только текст используйте Base64 (Convert.ToBase64String etc)
Здравствуйте, <Аноним>, Вы писали:
_>>естественно d2 будет больше, это же _ЗАКОДИРОВАННЫЙ_ по UTF8 массив d1
А>так и я про то.. как раскодировать, вот вопрос
а ты уверен что в файле у тебя действительно текст и причем текст действительно в формате UTF8?
Здравствуйте, Аноним, Вы писали:
А>хорошо, уточню.. у этих массивов разная длина, причем существенно разная
Значит исходный файл "picture.gif" содержит данные, которые не могут быть корректно представлены в UTF-8. Что неудивительно, поскольку (судя по расширению) исходный файл — бинарный.