конвертирование в строку
От: Unholy  
Дата: 31.03.06 13:46
Оценка:
Делаю следущее:

Stream fsIn;
fsIn = txtDownloadFile.PostedFile.InputStream;
byte[] bytes = new byte[fsIn.Length];
fsIn.Read(bytes, 0, (int) fsIn.Length);
...
XmlDocument xd = new XmlDocument();
xd.LoadXml(Convert.ToBase64String(bytes, 0, (int) fsIn.Length));

Но в Convert.ToBase64String(bytes, 0, (int) fsIn.Length) совсем не,то что в файле(в текстовом виде).
Подскажите как поправить ситуацию(в файле используется кодировка UTF-8).
Re: конвертирование в строку
От: Closer  
Дата: 31.03.06 13:59
Оценка:
Здравствуйте, Unholy, Вы писали:

U>Делаю следущее:


U>Stream fsIn;

U>fsIn = txtDownloadFile.PostedFile.InputStream;
U>byte[] bytes = new byte[fsIn.Length];
U>fsIn.Read(bytes, 0, (int) fsIn.Length);
U>...
U>XmlDocument xd = new XmlDocument();
U>xd.LoadXml(Convert.ToBase64String(bytes, 0, (int) fsIn.Length));

U>Но в Convert.ToBase64String(bytes, 0, (int) fsIn.Length) совсем не,то что в файле(в текстовом виде).

U>Подскажите как поправить ситуацию(в файле используется кодировка UTF-8).

ToBase64String или FromBase64String?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Re[2]: конвертирование в строку
От: Unholy  
Дата: 31.03.06 14:11
Оценка:
Здравствуйте, Closer, Вы писали:

C>ToBase64String или FromBase64String?


ToBase64String, я пытаюсь сконвертить из массива байтов в строку.
Re[3]: конвертирование в строку
От: Closer  
Дата: 31.03.06 14:33
Оценка:
Здравствуйте, Unholy, Вы писали:

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


C>>ToBase64String или FromBase64String?


U>ToBase64String, я пытаюсь сконвертить из массива байтов в строку.


Просто ToBase64String конвертирует массив байт в строку в формате Base64. У тебя так я понимаю строка уже приходит в формате Base64.
Если так то нужно использовать FromBase64String, а чтобы перевести полученый с её помошью массив байт нужно использовать метод Encoding.UTF8.GetString
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Re: конвертирование в строку
От: Unholy  
Дата: 31.03.06 15:06
Оценка:
Вообщем использовал System.Text.Encoding.UTF8.GetString(bytes) и получил свою строку, но тут встает вопрос о том чтобы
абстрагироваться от UTF-8, вдруг другаю кодировка. Что с этим можно сделать?
Re[4]: конвертирование в строку
От: Unholy  
Дата: 31.03.06 15:08
Оценка:
Здравствуйте, Closer, Вы писали:

C>Просто ToBase64String конвертирует массив байт в строку в формате Base64. У тебя так я понимаю строка уже приходит в формате Base64.

C>Если так то нужно использовать FromBase64String, а чтобы перевести полученый с её помошью массив байт нужно использовать метод Encoding.UTF8.GetString

Мне нужно получить из байтов строку, а FromBase64String делает наоборот.
Re[5]: конвертирование в строку
От: Closer  
Дата: 31.03.06 15:38
Оценка:
Здравствуйте, Unholy, Вы писали:

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


C>>Просто ToBase64String конвертирует массив байт в строку в формате Base64. У тебя так я понимаю строка уже приходит в формате Base64.

C>>Если так то нужно использовать FromBase64String, а чтобы перевести полученый с её помошью массив байт нужно использовать метод Encoding.UTF8.GetString

U>Мне нужно получить из байтов строку, а FromBase64String делает наоборот.


Тебе данные приходят из txtDownloadFile.PostedFile.InputStream приходят в формате Base64?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Re[6]: конвертирование в строку
От: Unholy  
Дата: 31.03.06 15:48
Оценка:
Здравствуйте, Closer, Вы писали:

C>Тебе данные приходят из txtDownloadFile.PostedFile.InputStream приходят в формате Base64?


Был бы очень рад ответить на Ваш вопрос, но не совсем его понимаю как это посмотреть(у меня произвольный текстовый файл)?
Re: конвертирование в строку
От: Unholy  
Дата: 31.03.06 15:49
Оценка:
Комментарий.
Вот какая встала задача, есть произвольный текстовый файл, надо его загрузить в БД( SQL Server 2000):
1. получаю массив byte[] из Stream
2. загружаю в поле типа image
3. конвертю массив в строку и совершаю с ним некие действа как со строкой
Затем надо его выгрузить из БД в массив, сконвертить в строку, совершить некие действа как со строкой
Необходимо ли знать кодировку для того чтобы сконвертить в строку(по-моему необходимо, а то ему не откуда будет знать как конвертить)?

Тогда получается
1. Мне необходимо при загрузки в БД в какое-нибудь поле сохранить кодировку. Как ее получить(если у меня есть только поток)?
2. Необходимо в зависимости от кодировки массиву byte[] сопоставить строку. Опять же как это реализовать(в предположении, что 1 выполнено)?

Буду очень признателен за любые ответы.
Re[7]: конвертирование в строку
От: Closer  
Дата: 31.03.06 16:06
Оценка:
Здравствуйте, Unholy, Вы писали:

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


C>>Тебе данные приходят из txtDownloadFile.PostedFile.InputStream приходят в формате Base64?


U>Был бы очень рад ответить на Ваш вопрос, но не совсем его понимаю как это посмотреть(у меня произвольный текстовый файл)?


Вот так вот выглядит строка в Base64 (т.е. состоит из английских букв и цифр, всё это дело заканчивается знаками равно)

5EwZHbBzfuM8+t5P/wHZvFPO4rnWEQAAAABJRU5ErkJggg==

Я так понимаю что она у тебя в этом формате приходит, иначе зачем тогда тебе вызывать метод Convert.ToBase64String

XmlDocument xd = new XmlDocument();
xd.LoadXml(Convert.ToBase64String(bytes, 0, (int) fsIn.Length));


Но Convert.ToBase64String переводит масив байт в строку в формате Base64, т.е. у тебя получается что-то вроде этого

XmlDocument xd = new XmlDocument();
xd.LoadXml("5EwZHbBzfuM8+t5P/wHZvFPO4rnWEQAAAABJRU5ErkJggg==");


И судя по всему метод LoadXml падает. т.к. не может конвертировать эту строку в XML.

Так?

Если так, то чтобы перевести "5EwZHbBzfuM8+t5P/wHZvFPO4rnWEQAAAABJRU5ErkJggg==" в нормальный вид (т.е. декодировать) тебе нужно использовать метод FromBase64.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Re[8]: конвертирование в строку
От: Unholy  
Дата: 31.03.06 16:58
Оценка:
Здравствуйте, Closer, Вы писали:

C>Так?


Да, все именно так как Вы написали.

C>Если так, то чтобы перевести "5EwZHbBzfuM8+t5P/wHZvFPO4rnWEQAAAABJRU5ErkJggg==" в нормальный вид (т.е. декодировать) тебе нужно использовать метод FromBase64.


Может быть я по жесткому торможу, но по-моему Convert.FromBase64String принимает строку и возвращает массив byte[],
а мне просто нужно строку которая будет читаться LoadXml и надо получить ее из массива типа byte[].
Re[2]: конвертирование в строку
От: Ziaw Россия  
Дата: 01.04.06 05:03
Оценка:
Здравствуйте, Unholy, Вы писали:

U>Вообщем использовал System.Text.Encoding.UTF8.GetString(bytes) и получил свою строку, но тут встает вопрос о том чтобы

U>абстрагироваться от UTF-8, вдруг другаю кодировка. Что с этим можно сделать?
передавать кодировку вместе со строкой
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Re[9]: конвертирование в строку
От: Closer  
Дата: 01.04.06 05:31
Оценка: 2 (1)
Здравствуйте, Unholy, Вы писали:

U>Может быть я по жесткому торможу, но по-моему Convert.FromBase64String принимает строку и возвращает массив byte[],


Верно, в качестве аргумента подаётся строка вида "5EwZHbBzfuM8+t5P/wHZvFPO4rnWEQAAAABJRU5ErkJggg==", а на выходе функции получается массив байт в котором содержится расшифрованная строка. Только вот эта функция тебе как я понимаю ни к чему. Ты просто хочешь из массива байт получить строку если это так то сделать это можно с помошью метода Encoding.UTF8.GetString который на основании массива байт вернёт тебе строку.

U>а мне просто нужно строку которая будет читаться LoadXml и надо получить ее из массива типа byte[].
Мы были здесь. Но пора идти дальше. (с) Дуглас Коупленд, Рабы "Микрософт"
Re[10]: конвертирование в строку
От: Unholy  
Дата: 01.04.06 07:08
Оценка:
Здравствуйте, Closer, Вы писали:

C>Верно, в качестве аргумента подаётся строка вида "5EwZHbBzfuM8+t5P/wHZvFPO4rnWEQAAAABJRU5ErkJggg==", а на выходе функции получается массив байт в котором содержится расшифрованная строка. Только вот эта функция тебе как я понимаю ни к чему. Ты просто хочешь из массива байт получить строку если это так то сделать это можно с помошью метода Encoding.UTF8.GetString который на основании массива байт вернёт тебе строку.


Спасибо Вам за то что так долго и упорно мне отвечаете, во всем разобрался.

Забил на строку(способ с Encoding.UTF8.GetString, но кодировки могут быть разными, дополнительная маята),
окрыл MemoryStream на массиве byte[], и из потока уже считываю в XmlDocument методом Load(надеюсь будет считывать вне зависимости от кодировки файла).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.