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

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

05.03.2012, 02:56. Показов 2841. Ответов 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
3957 / 1812 / 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
3957 / 1812 / 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
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru