Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 05.03.2012
Сообщений: 17

Правильная кодировка URL ссылки при запросе

05.03.2012, 02:56. Показов 2780. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Есть проблема, решить не могу, google не помогает.

При нажатии на кнопку программа скачивает страничку с поисковым запросом.
Суть в том, что вместо русских символов появляются вопросы

в Edit1 ввожу "qwerty йцукен"
на скачанной странице получаю "qwerty ������"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void __fastcall TformWeb::btnClick(TObject *Sender)
{
AnsiString s = "http://www.yandex.ru/yandsearch?text="+Edit1->Text; // <-- тот самый Edit1
char* p = s.c_str();
 
 
HINTERNET inet = InternetOpen(      
                "Mozilla/5.0 bla bla",      
                INTERNET_OPEN_TYPE_DIRECT,
                NULL, NULL, 0);
 
HINTERNET zapros = InternetOpenUrl( 
                inet,       
                s.c_str(),      
                NULL, 0, 0, 0);
 
if(zapros)
   {
    DWORD dwRead;
    char szTemp[1024];
    TFileStream* fs = new TFileStream(ExtractFilePath(Application->ExeName) + "\\poisk.html", fmCreate);
    while (InternetReadFile(zapros, (LPVOID)szTemp, 1024, &dwRead))
         {
          if     (!dwRead) break;
          fs->Write(szTemp, dwRead);
         }
   delete fs;
   }
 
InternetCloseHandle(zapros);
InternetCloseHandle(inet);
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2012, 02:56
Ответы с готовыми решениями:

Не правильная кодировка при отправке почты
Здравствуйте. При отправке писем на русском языке, на все почтовые сервисы кроме mail.ru письма приходят нормально. А на mail.ru приходят...

Правильная кодировка при создание имя файла
Здравствуйте. У меня есть данные с моего сайта которые поступают ко мне в класс через контроллер и потом я из них формирую имя файла. Но...

Не правильная кодировка при открытии файла под windows
Приветствую всех. Подскажите, пожалуйста, как решить вопрос с кодировкой? Возникла проблема. Сохраняю содержимое таблицы(qtableview) в...

8
0 / 0 / 0
Регистрация: 16.09.2010
Сообщений: 33
05.03.2012, 03:36
была похожая проблема с изменение кириличных символов решил вот так
(буквально пару постов ниже)
idHttp -> post неправильная передача значка @

суть в том что вместо стринга нужно использовать TStringStream *переменая = new TStringStream();

насколько я понял в этом проблема.
0
0 / 0 / 0
Регистрация: 05.03.2012
Сообщений: 17
05.03.2012, 07:15  [ТС]
Символы отправляются в неправильной кодировке видимо
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
05.03.2012, 11:48
darkblood0202, переходите на двухбайтовое представление:
C++
1
2
3
4
5
6
7
8
9
String URL = "http://www.yandex.ru/yandsearch?text=" + Edit1->Text;
wchar_t *wURL = new wchar_t [URL.Length()+1];
wcscpy(wURL,URL.w_str());
 
// далее исправляете все функции на двухбайтовые аналоги
// например, InternetOpenW(...), InternetOpenUrlW(...) и т.д.
// и не забудьте "убрать мусор"
 
delete []wURL;
1
0 / 0 / 0
Регистрация: 05.03.2012
Сообщений: 17
05.03.2012, 13:18  [ТС]
Цитата Сообщение от MikeSoft Посмотреть сообщение
darkblood0202, переходите на двухбайтовое представление:
Спасибо, все работает, только теперь новая проблема и на этот раз я даже не пойму в чем дело:
Ошибок нету, но не работает как требуется.
Страницы скачиваются с корректной кодировкой, а вот с этим проблеммы
Как будто русский текст просто пропускается

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
String URL = "http://translate.google.com/translate_tts?tl=ru&q=РУССКИЙ_ТЕКСТ" + Edit1->Text;
wchar_t *wURL = new wchar_t [URL.Length()+1];
wcscpy(wURL,URL.w_str());
 
String USER = "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.872.0 Safari/535.2";
wchar_t *wUSER = new wchar_t [USER.Length()+1];
wcscpy(wUSER,USER.w_str());
 
HINTERNET inet = InternetOpenW(     
                        USER.w_str(),
                        INTERNET_OPEN_TYPE_DIRECT,
                        NULL, NULL, 0);
 
HINTERNET zapros = InternetOpenUrlW(    
                        inet,       
                        URL.w_str(),
                        NULL, 0, 0, 0);
delete []wURL;
DWORD dwRead;
char szTemp[1024];
TFileStream* fs = new TFileStream(ExtractFilePath(Application->ExeName) + "\\GoogleVoise.mp3", fmCreate);
 
while (InternetReadFile(zapros, (LPVOID)szTemp, 1024, &dwRead))
{
if (!dwRead) break;
fs->Write(szTemp, dwRead);
}
 
delete fs;
 
InternetCloseHandle(zapros);
InternetCloseHandle(inet);
Сразу же после скачивания файла, он воспроизводится, но только без того текста, что посылается на русском.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if  (FileExists("GoogleVoise.mp3"))
    {
    AnsiString mp3a="GoogleVoise.mp3";          
    char *mp3b=mp3a.c_str();    
    chan=BASS_StreamCreateFile(FALSE, mp3b, 0, 0, 0);   
    BASS_ChannelPlay(chan,true);
 
    while   (BASS_ChannelIsActive(chan) != BASS_ACTIVE_STOPPED)
            {
            Sleep (1);
            }
    BASS_ChannelStop(chan);
    BASS_StreamFree(chan);
    }
0
0 / 0 / 0
Регистрация: 16.09.2010
Сообщений: 33
05.03.2012, 13:27
а русский текст точно отправляется? снифером смотрели?
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
05.03.2012, 14:23
Цитата Сообщение от darkblood0202 Посмотреть сообщение
char *mp3b=mp3a.c_str();
Вы забываете о том, что методы c_str(), w_str(), t_str() возвращают указатель на область памяти, в которую лишь ВРЕМЕННО копируется содержимое.
Используйте приведенную мною выше конструкцию:
C++
1
2
3
4
wchar_t *wValName = new wchar_t [sValName.Length()+1];
wcscpy(wValName,sValName.w_str());
//...
delete []wValName;
0
0 / 0 / 0
Регистрация: 05.03.2012
Сообщений: 17
05.03.2012, 21:21  [ТС]
Мне не совсем ясна эта конструкция, можно подробней объяснить?
0
0 / 0 / 0
Регистрация: 05.03.2012
Сообщений: 17
07.03.2012, 07:20  [ТС]
Цитата Сообщение от MikeSoft Посмотреть сообщение
Вы забываете о том, что методы c_str(), w_str(), t_str() возвращают указатель на область памяти, в которую лишь ВРЕМЕННО копируется содержимое.
Используйте приведенную мною выше конструкцию:
C++
1
2
3
4
wchar_t *wValName = new wchar_t [sValName.Length()+1];
wcscpy(wValName,sValName.w_str());
//...
delete []wValName;
Конструкция помогает только при скачивании страничек из интернета, с правильной кодировкой, но русский текст по каким-то причинам не передается

Добавлено через 1 час 52 минуты
Вопрос снят, проблема была в кодировке.
Спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2012, 07:20
Помогаю со студенческими работами здесь

Кодировка при запросе к API
Здравствуйте. Суть такова: через библиотеку re делаю запрос к API одного из сайтов. Один из параметров для этого запроса беру из файла....

Кодировка при запросе к серверу
В общем при создании запроса к серверу столкнулся с проблемой,что русские буквы(кириллица я так понимаю по правильному...

Кодировка при запросе страницы
Я с помощью curl забираю title страницы. Скрипт в UTF-8. Если страница с которой забираю в кодировке utf-8 всё нормально. Если 1251 знаки...

Переадресация на URL при POST запросе
using System; using System.Collections.Generic; using System.Text; using System.Collections.Specialized; using System.Net; using...

Изменение url при ajax запросе
Добрый день, подскажите конструкцию работы того же mail.ru или gmail.com, когда нажимаешь на &quot;входящие&quot; страница не...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru