С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/41: Рейтинг темы: голосов - 41, средняя оценка - 4.56
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21

WebRequest и кирилица

13.07.2012, 18:48. Показов 8850. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь получить имя файла таким вот способом

C#
1
2
3
4
5
6
7
8
private static string GetFileName(string url)
        {
            WebRequest myReq = WebRequest.Create(url);
            WebResponse myResp = myReq.GetResponse();
            url = myResp.ResponseUri.Segments[myResp.ResponseUri.Segments.Length - 1] //тут имя файла
            myResp.Close();
            return url;
        }
в результате url="%C3%91%C2%82%C3%90%C2%B5%C3%91%C2%81%C 3%91%C2%82.txt"
на самом деле имя файла "тест.txt"

пробовал менять кодировки на UTF8, ASCII, 1251,unicode
C#
1
2
StreamReader sr = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(myResp.ResponseUri.Segments[myResp.ResponseUri.Segments.Length - 1])));
url = sr.ReadLine();
результата никакого. одни кракозябры меняются на другие.

как получить нормальное имя?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.07.2012, 18:48
Ответы с готовыми решениями:

кирилица
компилятор g++ под ubuntu если сделать так char *one="asdfgыффыЁ"; printf("%s",one); // вывод asdfgыффыЁ ...

Кирилица
Ввожу в форме файла html строку на русском языке, она отправляется на сервер (через AJAX) и выводиться уже кракозябрами. Файл html...

кирилица
Весь русский текст на сайте выводится не правильно и вовсе каким то бредом. Сам файл перекодирывал в utf-8, а в head добавил мета тег...

20
1 / 1 / 0
Регистрация: 10.04.2012
Сообщений: 84
13.07.2012, 18:55
С этими кодировками одна большая проблема. Что недоработано в .нет так это кодировки Перекодировка строки пробовал этот метод. Не работает.
При выборке сайтов в utf8 все отлично. А если попадется 1251, то или крякозяблики, или квадратики, или вопросики
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
13.07.2012, 21:53
Попробуйте написать
C#
1
2
3
WebRequest myReq = WebRequest.Create(url);
myReq.Headers.Add("Accept-Charset", "windows-1251");
WebResponse myResp = myReq.GetResponse();
Или другую кодировку.

А тут я вообще не понял:
C#
1
StreamReader sr = new StreamReader(new MemoryStream(Encoding.UTF8.GetBytes(myResp.ResponseUri.Segments[myResp.ResponseUri.Segments.Length - 1])));
Зачем так много?
C#
1
2
Stream ReceiveStream1 = myResp.GetResponseStream();
StreamReader sr = new StreamReader(ReceiveStream1, Encoding.GetEncoding(1251));
Поиграйтесь с кодировками, они капризные.

Добавлено через 2 минуты
А вообще, "%C3%91%C2%82%C3%90%C2%B5%C3%91%C2%81%C3 %91%C2%82" - это кодировка url.
Почитайте о кодировке тут.
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
13.07.2012, 23:55  [ТС]
Цитата Сообщение от Mans7 Посмотреть сообщение
Попробуйте написать
не работает


Цитата Сообщение от Mans7 Посмотреть сообщение
А тут я вообще не понял:
Зачем так много?
не много, а как раз нормально. мне не нужен весь ответ сервера, мне нужно только кусок который и есть имя файла.

это получение последнего сегмента от ссылки -имени файла
C#
1
myResp.ResponseUri.Segments[myResp.ResponseUri.Segments.Length - 1]
это один из способов сменить кодировку
C#
1
new MemoryStream(Encoding.UTF8.GetBytes
я понимаю что те кракозяблы это кодировка url. но от этого не легче. пробовал декодировать методом тыка при помощи всяких
сайтов типа этого. но толку ни какого((
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
13.07.2012, 23:58
Цитата Сообщение от iundersun Посмотреть сообщение
это получение последнего сегмнта от ссылки -имени файла
Любопытный метод, я с таким не сталкивался. Возьму-ка на заметку!
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
14.07.2012, 16:50  [ТС]
Цитата Сообщение от Mans7 Посмотреть сообщение
Любопытный метод, я с таким не сталкивался. Возьму-ка на заметку!
мм, я просто посмотрел в отладчике на содержание webresponse и сделал такую штуку. вроде просто все

путем неимоверных мук я докопался до
C#
1
url=HttpUtility.UrlDecode(url);
которое по идее должно самотстоятельно декодировать в читабельный вид, но не тут то было.
выдало мне оно "тест.txt"
еще немного помучавшись я определил что нужно полученый результат перекодировать из utf8 в iso8859-1.
но компилятор при этом выдает еще один кракозябл "тест.txt"

если уж стандартные средства не могут помочь, что ж это такое?

Добавлено через 1 час 20 минут
хм, оказывается ссылка которую отсылает сайт моей программе имеет нормальный вид
%D1%82%D0%B5%D1%81%D1%82
а при получении она еще раз url кодируется до "%C3%91%C2%82%C3%90%C2%B5%C3%91%C2%81%C3 %91%C2%82"
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
15.07.2012, 00:53
Можно расшифровать - вот онлайн сервис http://www.ifstudio.org/seo/decoder.php . В качестве ответа выдает слово "тест" (это и есть закодированное слово).

Вот нашел таблицу символов. При желании можно свой декодер сделать.
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
15.07.2012, 04:25  [ТС]
Цитата Сообщение от Mans7 Посмотреть сообщение
Можно расшифровать - вот онлайн сервис
та сервис и я нашел но от этого не легче

а вот самому написать не так легко

в таблицах указаны возможные кодировки 2 байтами на 1 символ. а в моем случае получется аж 4 байта на символ.

%d1%82 -> "т"
%C3%91%C2%82 -> "т"

вот я и не пойму как его привести к нормальному виду.

ладно. мб есть еще какой способ решить мою проблему...
3 убил на какую-то фигню. все стоит из за 2 строчек))

Добавлено через 26 минут
*3 дня)
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
15.07.2012, 04:37
Цитата Сообщение от iundersun Посмотреть сообщение
хм, оказывается ссылка которую отсылает сайт моей программе имеет нормальный вид %D1%82%D0%B5%D1%81%D1%82
Так ведь ЭТО же можно нормально декодировать =)
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
15.07.2012, 04:42  [ТС]
Цитата Сообщение от Mans7 Посмотреть сообщение
Так ведь ЭТО же можно нормально декодировать =)
можно. а как его получить?)) оно такое пока не попало в webresponse. а в webresponse превращается в "кашу"

я ж и думаю, мб есть еще какой то способ, без использования webresponse и webrequest?
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
15.07.2012, 04:52
Странно вы как-то заходите для выяснения ссылки, обычно используются методы по-проще.

Добавлено через 8 минут
Вот что вижу я:
C#
1
2
3
4
5
6
7
8
string url = "https://www.google.ru/search?q=Как+производить+замер+времени";
            WebRequest myReq = WebRequest.Create(url);
            WebResponse myResp = myReq.GetResponse();
            
            string url2 = myResp.ResponseUri.AbsoluteUri;
            url = HttpUtility.UrlDecode(myResp.ResponseUri.AbsoluteUri);
            
            myResp.Close();
Если делать так, то на выходе от url2 я вижу: htt ps://www.goo gle.r u/sea rch?q=%D0%9A%D0%B0%D0%BA+%D0%BF%D1%80%D0 %BE%D0%B8%D0%B7% D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D1%8C+%D0% B7%D0%B0%D0%BC%D0%B5%D1%80+%D0%B2%D1%80% D0%B5%D0%BC%D0%B5%D0%BD%D0%B8
А от url вижу: ht tps://w ww.googl e.ru/search?q=Как производить замер времени
Пробелы поставил чтоб не было линков.

Вроде всё в ажуре
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
15.07.2012, 14:10  [ТС]
Цитата Сообщение от Mans7 Посмотреть сообщение
Вроде всё в ажуре
с гуглом и у меня все в порядке. попробуй

C#
1
url="http://www.ex.ua/get/337580966322/28786649";
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
15.07.2012, 21:52
Ответ url = HttpUtility.UrlDecode(myResp.ResponseUri .AbsoluteUri) :
C#
1
"http://fs185.www.ex.ua/get/337580966322/acefdd27b5c0bd96983705e31cd5c8ed/28786649/тест.txt"
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
15.07.2012, 22:12  [ТС]
крыша едет не спеша тихо шифером шурша...

C#
1
2
url2 = "http://fs186.www.ex.ua/get/337580966322/4793f4aaac15dd40bb72d59dd51e0fc4/28786649/%C3%91%C2%82%C3%90%C2%B5%C3%91%C2%81%C3%91%C2%82.txt";
url="http://fs186.www.ex.ua/get/337580966322/4793f4aaac15dd40bb72d59dd51e0fc4/28786649/тест.txt"
ладно, так и быть, сдаюсь.
главное - формат файла, а имя можно при помощи Random состряпать
0
1 / 1 / 0
Регистрация: 10.04.2012
Сообщений: 84
15.07.2012, 23:17
http://habrahabr.ru/post/147843/
может поможет
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
15.07.2012, 23:39  [ТС]
спасибо, но не помогло(
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
16.07.2012, 01:27
Я вас, кстати обманул. Я получаю кракозябры, "тесÑ" вместо "тест", я сделал ошибку в своем коде. Уже часа 3 намучался с этими кодировками, перебрал всё что можно... Я даже не приблизился к ответу. Единственное что я понял:
1. Если это кодировать из ISO-8859-1 в UTF-8, то получаем "тес�";
2. Если это кодировать из CP1129 в UTF-8, то получаем "т�с�";
3. Все остальные кодировки показывают только абракадабру.
Напрашивается вывод, что сервер сам даёт кривые показания, т.к. WebRequest принимает уже "кривой" набор символов. ОДНАКО! Браузер, инструмент Fiddler в заголовке Location чётко отображают русские буквы. Значит предыдущее утверждение можно отбросить. Ну с опять-таки, с другой стороны, с другими сайтами я такого не наблюдал... Хочется понять почему такое происходит.

Добавлено через 9 минут
Кстати кракозябры я получаю через HttpWebRquest

Добавлено через 9 минут
Хотя это всё абсолютно бесполезная инф-я... я даже не знаю что и делать тут..
1
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
16.07.2012, 01:37  [ТС]
Цитата Сообщение от Mans7 Посмотреть сообщение
сервер сам даёт кривые показания
если посмотреть при помощи httpanalyzer на "общение" сервера с оперой то видно что ссылку возвращает в нормальном виде. а в случае с моей прогой сервер дает уже кривую ссылку. мб попробовать прикинутся оперой?))
0
 Аватар для Mans7
64 / 64 / 14
Регистрация: 05.08.2011
Сообщений: 323
Записей в блоге: 5
16.07.2012, 01:48
Нашел только один способ решения. Не самый грамотный и красивый, но рабочий:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        private void button3_Click(object sender, EventArgs e)
        {
            string url = "http://www.ex.ua/get/337580966322/28786649";
 
            WebBrowser wb = new WebBrowser();
            wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
            wb.Navigate(url);
        }
 
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            WebBrowser wb = sender as WebBrowser;
            MessageBox.Show(HttpUtility.UrlDecode(wb.Url.AbsoluteUri));
        }
В итоге появляется окно с полный ПРАВИЛЬНЫМ адресом файла "текст.txt"

Добавлено через 1 минуту
Цитата Сообщение от iundersun Посмотреть сообщение
прикинутся оперой?))
Не поможет =( Я пробовал прикидываться разными браузерами, рез-т был один. Фиддлер показывает что должно прийти русское слово, респонсер выдаёт бред. Почему - я так и не понял.

Добавлено через 7 минут
ВСЯ проблема в том, что WebResponse получает кривой ответ (а получает кривой, скорее всего, из-за кривого запроса). Осталось разобраться почему. (т.к. даже если ввести этот бред который нам кажется нечитабельным в строчку адреса браузера - откроется тот же самый искомый файл, вот только действительное "имя файла" тогда будет кодировано).
0
 Аватар для iundersun
3 / 3 / 1
Регистрация: 13.07.2012
Сообщений: 21
16.07.2012, 05:10  [ТС]
работает частично: если это txt то такой вариант подходит. а вот если
C#
1
url="http://www.ex.ua/get/337580966322/28859558";
то выскакивает окно с предложением сохранить файл. его можно как то убрать?

а вот это на 100% работает!)
C#
1
2
3
4
5
6
7
            string url = "http://www.ex.ua/get/337580966322/28859558";
            WebRequest myReq = WebRequest.Create(url);
            WebResponse myResp = myReq.GetResponse();
            byte[] b = Encoding.GetEncoding("iso-8859-1").GetBytes(HttpUtility.UrlDecode(myResp.ResponseUri.AbsoluteUri));
            url = Encoding.UTF8.GetString(b);
            listBox1.Items.Add(url);
            myResp.Close();

Mans7, спасибо тебе огромное!!))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2012, 05:10
Помогаю со студенческими работами здесь

Кирилица в бд
БД не принимает кириллицу. Есть форма ввода данных, которые передаются в бд (но при вводе кириллицы просто пустота) Это запрос...

Кирилица
Всем привет, мы в универе работаем на IDE Dev-cpp, и вопрос такой, он не распознает кириллицу записанную в код при компиляции его, есть...

Кирилица
И не вздумайте посылать на Google задача такая, нужно в консольном приложении Qt осуществить: 1вывод в консоль кирилицы(желатьльно без...

Кирилица
В запросах при написании на русском выводит знаки вопроса. select 'Например' выведет ?????? Как заставить его выводить на русском?

кирилица в адресе
Добрый день! есть вопрос: насколько хорошо или плохо в пути к разделам вот таакая вещь...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru