Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2010, 12:52   #1
Кнехт
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 18
По умолчанию Вопрос по работе со строками.

Здравствуйте! Я только учусь, потому дилетантский вопрос:
Моё asp.net приложение формирует строку, на основе xml и xslt:

StringWriter sw = new StringWriter();
xsl.Transform(xmldoc, null, sw, (XmlResolver)null);
result = sw.ToString();

При этом русские буквы отображаются иероглифами (РІСЃСЋРґСѓ). Хотя входные xsl и xml имеют кодировку utf8 и на сайте тоже выставлена utf8.
Как и к чему мне преобразовать ответную строку, чтобы всё было хорошо?
Кнехт вне форума Ответить с цитированием
Старый 22.11.2010, 18:13   #2
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

look for smth like that...
Код:
StringWriter sw = new StringWriter(Encoding.UTF8)
akasex вне форума Ответить с цитированием
Старый 23.11.2010, 12:57   #3
Кнехт
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 18
По умолчанию

Такого конструктора нет у StringWriter.
Ещё варианты?
Кнехт вне форума Ответить с цитированием
Старый 23.11.2010, 13:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Такого конструктора нет у StringWriter.
Как?
А
Цитата:
StringWriter(IFormatProvider) Инициализирует новый экземпляр класса StringWriter с указанным форматом объекта.
Разве не он?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2010, 16:38   #5
Кнехт
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 18
По умолчанию

а, просто StringWriter(Encoding.UTF8) - не работает.
Не подскажете, как конкретно написать?
Кнехт вне форума Ответить с цитированием
Старый 23.11.2010, 21:56   #6
akasex
Форумчанин Подтвердите свой е-майл
 
Аватар для akasex
 
Регистрация: 31.03.2008
Сообщений: 179
По умолчанию

Код:
using System;
using System.Text;

public class MyCustomFormat : IFormatProvider, ICustomFormatter
    {
        public object GetFormat(Type formatType)
        {
            if (formatType == typeof(ICustomFormatter))
                return this;
            else
                return null;
        }

        public string Format(string fmt, object arg, IFormatProvider formatProvider)
        {
            if (arg.GetType() != typeof(String))
            try
            {
                return String.Empty;
            }
            catch (FormatException e)
            {
                throw new FormatException(String.Format("The format of '{0}' is invalid.", fmt), e);
            }
            byte[] data = System.Text.Encoding.UTF8.GetBytes(arg.ToString());
            char[] chars = new char[data.Length + 1];
            System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
            int charLen = d.GetChars(data, 0, data.Length, chars, 0);
            return new String(chars);
        }
    }


.....

System.IO.StringWriter sw = new System.IO.StringWriter(new MyCustomFormat());

.....
akasex вне форума Ответить с цитированием
Старый 24.11.2010, 11:53   #7
Кнехт
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 18
По умолчанию

Спасибо за рабочий код.
Однако, оказалось, ошибка у меня в другом месте, - при получении, XML уже содержит "иероглифы":
Код:
WebClient wc = new WebClient();
string xmlFolders = wc.DownloadString(xmlURL);
Хотя если открывать руками в браузере, всё ок...
Кнехт вне форума Ответить с цитированием
Старый 25.11.2010, 17:09   #8
Кнехт
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 18
По умолчанию

Тема закрыта. Решением было получение xml в байт-массив с последующим преобразованием в строку нужной кодировки:
Код:
                byte[] XMLdata = wc.DownloadData(URL);
                string xmlFolders = Encoding.UTF8.GetString(XMLdata);
Кнехт вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в работе со строками, язык С ПеПпИ Помощь студентам 1 18.11.2010 01:24
Цикл do while при работе со строками. Lazio Помощь студентам 7 11.10.2009 16:11
Реализация функций Rexx по работе со строками в VBA tae1980 Microsoft Office Excel 19 17.03.2009 11:05
Вопрос по работе с таблицей НД БД golt-andrej БД в Delphi 4 06.10.2008 08:58
нужна помощь по работе с строками файлов... Ruffian Общие вопросы Delphi 9 15.11.2006 16:05