С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 14
1

Считать содержимое сайта в правильной кодировке

05.01.2013, 15:14. Показов 2531. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, пишу парсер для сайта, точнее краулер)).
Мне нужно считать содержимое сайта в правильной кодировке. Считываю через webrequest/response и streamreader
Кодировка указывается в строчке StreamReader streamreader = new StreamReader(stream, ASCIIEncoding.UTF8);
Пока я считываю всегда в UTF-8, а потом через регулярные выражения проверяю вхождения русских символов.
Затем, если символов не нашлось выполняю ещё один запрос, но в streamreader уже пишу default.
Но это, конечно, какой-то прямо неполноценный вариант)) 2 запроса к одному ресурсу плохо делать))
Думал, что может получится так

C#
1
2
 byte[] bytes = Encoding.UTF8.GetBytes(text);
 text = Encoding.Default.GetString(bytes);
но все-равно кракозябра на выходе. Подскажите, как правильно преобразовать из одной кодировки в другую.
И ещё, буду признателен, если посоветуете, как всю процедуру упростить. Обойтись без регулярных выражений,
а то вдруг придётся парсить какой-нибудь корейский сайт, тогда мой метод уже не прокатит. Спасибо)))
0
IT_Exp
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
05.01.2013, 15:14
Ответы с готовыми решениями:

Чтение файла в правильной кодировке
Нужно,чтобы из текстового файла выводил самое длинное слово.Если слово на английском,то никаких...

Запись в файл в правильной кодировке
у меня есть файл (блокнот), в него выводится информация. но вместо нормального текста там...

Отправка письма в правильной кодировке
Собственно тема заезжанная: как отправить письмо, что бы русский текст отображался вместо знака "?"...

Отправка почты в правильной кодировке
Наверняка тема поднималась, но не могу найти решения для своей проблемы. может поможете? Суть...

10
56 / 56 / 14
Регистрация: 06.04.2012
Сообщений: 185
05.01.2013, 17:59 2
Я точно не уверен, но по-моему Default это и есть UTF8, а для русского вам нужно использовать Cp-1251
C#
1
StreamReader streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.GetEncoding(1251));
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 14
05.01.2013, 18:31  [ТС] 3
Ну, насколько я понял, default - кодировка по-умолчанию для данного компьютера. В моём случае это windows-1251, т. к. строчки

C#
1
StreamReader streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.GetEncoding(1251));
и
C#
1
StreamReader streamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.Default);
выдают одно и тоже, а с utf8 как раз другой результат. Но проблема-то заключается в том, чтобы определить, какую кодировку использовать к текущему сайту
0
56 / 56 / 14
Регистрация: 06.04.2012
Сообщений: 185
05.01.2013, 18:38 4
теоретически сайт должен указывать какую кодировку он использует
HTML5
1
 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
у данной страницы, у HtmlAgilityPack есть автоопределиние кодировки, можете его попробовать использовать
1
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 14
05.01.2013, 19:31  [ТС] 5
я где-то читал, что не на всех сайтах чарсет прописан и все-равно в этом случае придется делать 2 запроса, первый раз, чтобы получить нужные метаданные и вытащить оттуда кодировку, а второй раз, чтобы собственно получить все содержимое страницы. HtmlAgilityPack посмотрю, спасибо.
Но мне все-равно кажется, что можно считывать все сайты, например в utf-8, а потом, если что, преобразовывать через массив байт в нужную кодировку, но что-то вот не получается пока))
0
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
05.01.2013, 19:34 6
Проверьте заголовки HTTP-запроса - там должна быть указана кодировка.
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 14
05.01.2013, 20:14  [ТС] 7
Ну вот с одного сайта, здесь указано

Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
Content-Type: text/html; charset=windows-1251
Date: Sat, 05 Jan 2013 16:11:57 GMT
Server: nginx/1.0.5
X-Powered-By: PHP/5.3.6
а вот с другого

Pragma: no-cache
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Type: text/html
Date: Sat, 05 Jan 2013 16:13:40 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Set-Cookie: PHPSESSID=bio41nd8neatq48hk1kib1u762; path=/
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
05.01.2013, 20:28 8
при запросе на сайт можно указать в какой кодировке хочется получить ответ, правда сайт не обязан выполнять это условие

если известно на какие сайты запросы то проще всего указать конкретную кодировку для каждого
0
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 14
05.01.2013, 20:34  [ТС] 9
m0nax, а есть пример?, в webrequest я такого не нашёл. В том и проблема, что неизвестно куда занесет мою программу)) она переходит по ссылкам почти рандомно)
0
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
05.01.2013, 23:45 10
Accept-Charset
Accept-Encoding
Accept-Language
http://ru.wikipedia.org/wiki/С... овков_HTTP

а примеры смотри у запросов браузеров, они частенько отсылают это
они там довольно замороченые бывают, с указанием степени "желаемости", типа очень хочу utf8, если нету то давай cp1251, если и его нет давай ascii
0
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
06.01.2013, 01:53 11

Не по теме:

Цитата Сообщение от m0nax Посмотреть сообщение
типа очень хочу utf8, если нету то давай cp1251, если и его нет давай ascii
мне кажется их писали девушки-программисты) :jokingly:



Цитата Сообщение от pld Посмотреть сообщение
Пока я считываю всегда в UTF-8, а потом через регулярные выражения проверяю вхождения русских символов.
Затем, если символов не нашлось выполняю ещё один запрос, но в streamreader уже пишу default.
Ну что сказать.. Простенькие компиляторы пишут полностью на if-ax,по-этому смотрите сами.
Это не самый плохой вариант.
0
06.01.2013, 01:53
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
06.01.2013, 01:53
Помогаю со студенческими работами здесь

Запись в файл в правильной кодировке
Столкнулся с проблемой русских букв при работе с файлами. Не могу выбрать нужную кодировку для...

Чтение файла в правильной кодировке
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...

Записать информацию в файл в правильной кодировке
Всем доброго дня !!! Пытаюсь в файл Vasa.txt записать Привет, Лопух! , а получаю ЏаЁўҐв, ‹®Їге!...

Как вывести текст в правильной кодировке
.386p data segment para public 'data' use16 message db 'Привет$' data ends stk segment para...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru