Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218

Возникают знаки вопроса вместо текста при отправке в твиттер. CURL

18.06.2014, 21:53. Показов 4328. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, есть код, который делает пост в твиттер. Пост отправляется нормально, но если буквы русские, то вместо них знаки вопроса в ромбиках. Как такое исправить? Ясно, что в кодировке дело...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
std::string token, content, twit, post_data;
            if (user_word.find('[', 0) != std::string::npos) user_word.erase(user_word.find('[', 0), user_word.size());
            twit = tranMem[size_tm];
            twit.erase(0, user_word.size());
            curl_easy_setopt(curl_tw, CURLOPT_URL, "https://twitter.com/");
            curl_easy_setopt(curl_tw, CURLOPT_HTTPGET, 1);
            curl_easy_setopt(curl_tw, CURLOPT_WRITEDATA, &content);
            curl_easy_setopt(curl_tw, CURLOPT_WRITEFUNCTION, &Write);
            res = curl_easy_perform(curl_tw);
            content.erase(0, content.find("formAuthenticityToken", 0) + 34);
            token = content.substr(0, content.find("&q", 0));
            post_data += "authenticity_token=" + token + "&page_context=profile&place_id=&status=" + twit + "&tagged_users=";
            curl_easy_setopt(curl_tw, CURLOPT_URL, "https://twitter.com/i/tweet/create");
            curl_easy_setopt(curl_tw, CURLOPT_POST, 1);
            curl_easy_setopt(curl_tw, CURLOPT_POSTFIELDS, post_data.c_str());
            curl_easy_setopt(curl_tw, CURLOPT_POSTFIELDSIZE, post_data.length());
            res = curl_easy_perform(curl_tw);
В программе еще стоит такая строчка
C++
1
system("chcp 1251");
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2014, 21:53
Ответы с готовыми решениями:

Почему знаки вопроса вместо текста?
#include <iostream> #include <windows.h> #include <conio.h> #include <math.h> void main() { HANDLE hStdOut =...

phpmyadmin выводит знаки вопроса вместо текста.
Всем привет, Написал гостевую книгу, что бы люди оставляли сообщения, но некоторые нехорошие люди написали то что не стоило писать,...

Вместо русских букв знаки вопроса при создании XML
Добрый день! В бд все таблицы в кодировке utf-8. при создании xml-файла посредством php вместо русских букв отображаются только знаки...

28
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115
18.06.2014, 22:28
а если:
C++
1
2
#include <clocale>
setlocale(0, ".1251");
0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
18.06.2014, 23:48  [ТС]
Цитата Сообщение от srin Посмотреть сообщение
а если:
C++
1
2
#include <clocale>
setlocale(0, ".1251");
Увы, не прокатило так(
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.06.2014, 10:28
angryjack93, попробуйте использовать wstring.
0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
19.06.2014, 11:39  [ТС]
Думал уже об этом, но у меня программа так-то большая и там все на string стоит. Есть ли какой-нибудь способ преобразовать string в wstring?
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
19.06.2014, 12:43
C++
1
#define string wstring
Но я бы не советовал.
0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
19.06.2014, 13:49  [ТС]
Не вариант, море ошибок, куча использованных функций становятся не рабочими. Нужно именно в одном месте исправить string на wstring... Ну или весь код переписывать, что не камильфо

Добавлено через 49 минут
Попробовал отдельную программу для поста, но уже с wstring. Вообще перестал отправлять пост. Ошибок нигде не выдает: ни в программе, ни сам компилятор.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
20.06.2014, 14:57
Цитата Сообщение от SatanaXIII Посмотреть сообщение
C++
1
#define string wstring
Но я бы не советовал.
angryjack93, Не слушай дезинформаторов, они издеваются вероятно )

Если же имеется вывод кракозябл, то вполне вероятно что нужно либо перекодировать предварительно строки, либо
C++
1
system("chcp 65001");
вместо
C++
1
system("chcp 1251");
Это если там UTF-8 (это следовало бы узнать)

Да и шрифт в cамой консоли нужно поменять шрифт на Lucidu Console http://anvarichn.livejournal.com/43752.html
0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
28.06.2014, 01:31  [ТС]
Если сделать так, то опять таки всю программу придется переписывать. Мне именно нужно отправить строку, но преобразованную в юникод-версию, а остальной код не трогать.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.06.2014, 01:50
А поточнее с формулировками ?

Исправить нужно только одну строчку кода.
0
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115
28.06.2014, 11:10
1. Пишу твит "Hello! It's my first message." Часть строки запроса в твиттер:
&place_id=&status=Hello!+It's+my+first+m essage.&tagged_users=
2. Пишу твит "Привет! Это моё первое сообщение." Часть строки запроса в твиттер:
&status=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D 1%82!+%D0%AD%D1%82%D0%BE+%D0%BC%D0%BE%D1 %91+%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B5 +%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0 %BD%D0%B8%D0%B5.&tagged_users=
так что ковыряйте тему "кодирование URL"
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.06.2014, 11:31
Цитата Сообщение от srin Посмотреть сообщение
так что ковыряйте тему "кодирование URL"
srin, 10. Преобразование в URL вид.

Но я думаю речь о выводе ответа, а не запросе.
0
28.06.2014, 11:41

Не по теме:

Цитата Сообщение от Avazart Посмотреть сообщение
Но я думаю речь о выводе ответа, а не запросе.
а я то как раз думаю, что он отсылает твит в стандартной кодировке, а результат уже смотрит в браузере и естественно у него выводятся кракозябры вместо кирилицы.

0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
28.06.2014, 12:33  [ТС]
В общем, есть строка в ANSI с сообщением, которое нужно отправить в твиттер. Но после отправки в твиттере выводятся знаки вопросов. Вот я и думаю, что можно строку с сообщением просто в Unicode версию преобразовать. Если есть другие варианты (не переписывая всей программы), то буду и им рад!

Добавлено через 1 минуту
Преобразовывал в урл вид уже, не помогло:\
0
25 / 25 / 14
Регистрация: 05.05.2014
Сообщений: 115
28.06.2014, 12:37
попробуйте принудительно:
C++
1
string twit = "%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82!";
0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
28.06.2014, 12:57  [ТС]
А вот так получается:\ Теперь вопрос такой - как также для произвольной строки сделать? Обычным curl_easy_escape не прокатывает.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.06.2014, 13:17
Цитата Сообщение от angryjack93 Посмотреть сообщение
не прокатывает.
Что значит не проканывает ? Может просто руки не от туда ...
0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
28.06.2014, 14:16  [ТС]
да нет, она работает, но выдает другие шестнадцетиричные числа:\ при авторизации же экранирую символы этой функцией и все нормально, а с кириллицей что-то не хочет...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.06.2014, 14:51
Приведите код.
0
7 / 3 / 2
Регистрация: 04.11.2012
Сообщений: 218
28.06.2014, 16:01  [ТС]
C++
1
2
3
4
5
6
7
std::string Escape(CURL* curl_c, const std::string& text){              //экранирование символов
    std::string result;
    char* esc_text = curl_easy_escape(curl_c, text.c_str(), text.length());
    result = esc_text;
    curl_free(esc_text);
    return result;
}
Авторизация
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
curl_tw = curl_easy_init();
        if (curl_tw){
            std::string url("https://twitter.com/"), post_data, token;
            curl_easy_setopt(curl_tw, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl_tw, CURLOPT_WRITEFUNCTION, &Write);
            curl_easy_setopt(curl_tw, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_easy_setopt(curl_tw, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_easy_setopt(curl_tw, CURLOPT_WRITEDATA, &content);
            curl_easy_setopt(curl_tw, CURLOPT_COOKIEFILE, "");
            curl_easy_setopt(curl_tw, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
            res = curl_easy_perform(curl_tw);
            content.erase(0, content.find("authenticity_token", 0) + 27);
            token = content.substr(0, content.find('"', 0));
            content.clear();
            url += "sessions";
            post_data += "session[username_or_email]=" + Escape(curl_tw, login) + "&session[password]=" + Escape(curl_tw, password) +
                "&return_to_ssl=false&scribe_log=&redirect_after_login=%2F&authenticity_token=" + token;
            curl_easy_setopt(curl_tw, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl_tw, CURLOPT_FOLLOWLOCATION, 1);
            curl_easy_setopt(curl_tw, CURLOPT_POST, 1);
            curl_easy_setopt(curl_tw, CURLOPT_POSTFIELDS, post_data.c_str());
            curl_easy_setopt(curl_tw, CURLOPT_POSTFIELDSIZE, post_data.length());
            res = curl_easy_perform(curl_tw);
Это все работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.06.2014, 16:01
Помогаю со студенческими работами здесь

Вместо руских букв знаки вопроса (при запросе insert into)
Вместо руских букв знаки вопроса при запросе insert into. Что делать?

Знаки вопроса ??? вместо русских букв.
Всем привет, внезапно нарисовался трабл в виде знаков вопроса вместо кириллицы. На локальном серваке всё ок, выложил к провайдеру...

Знаки вопроса вместо русских букв
Имеется приложение в котором присутствует TextBox. Копирую текст со страниц интернет-сайтов и вставляю в TextBox и вместо русских букв -...

Вместо записей в базе - знаки вопроса
Теперь такая вещь: я сделал новую базу и ввел туда несколько записей (2 столбца: текстовый и МЕМО). Но вместо записей отображаются знаки...

Знаки вопроса вместо mp3 тегов
Ребята, вот какая штука: скачал дискографию Кино, открываю (у меня русская Windows 7) а вместо тегов ??????? и так далее. Можно это...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru