Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 396
1

Кирилица в URL запросе

30.04.2018, 21:45. Показов 886. Ответов 11
Метки нет (Все метки)

Имеется URL запрос вида: http://localhost/абв, если его считать в программу в буфер char и отбросить лишнее (нас интересуют только русские символы), то получим "%D0%B0%D0%B1%D0%B2". Как это переконвертировать в char[4] = "aбв"???
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2018, 21:45
Ответы с готовыми решениями:

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

Кирилица в массив
Проблема заключается в записи кирилицы в вектор. #include<iostream> using namespace std;...

Freetype + кирилица
при использовании фритайпа не выводится кирилица(точнее выводится, только в виде квадратика). Задаю...

Кирилица в конслое
Добрый день , прошу помочь решить проблему с русификацией полученной информации : Вырезка из...

11
Don't worry, be happy
17172 / 10055 / 1935
Регистрация: 27.09.2012
Сообщений: 25,050
Записей в блоге: 1
30.04.2018, 22:21 2
Цитата Сообщение от JIawliet Посмотреть сообщение
%D0%B0%D0%B1%D0%B2
D0 B0 D0 B1 D0 B2 - это последовательность значений байт для кодировки utf-8.
Цитата Сообщение от JIawliet Посмотреть сообщение
Как это переконвертировать в char[4] = "aбв"???
Парсим строку, переводим строчку в последовательность байт
C++
1
char str[] = {0xD0, 0xB0, 0xD0, 0xB1, 0xD0, 0xB2, 0x00};//utf-8 строка с кириллицей
0
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 396
30.04.2018, 22:25  [ТС] 3
Croessmah, угу, это ясно, что 'a' в UTF8 в 16-виде будет D0DB... сделаем это проще, я отбросил из строки все символы "%", и оставил только "D0DB" - это у нас 16-ричное представление символа 'a' в UTF8, верно? супер.. что дальше? как 'a' получить?))))
0
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 396
30.04.2018, 22:41  [ТС] 4
Цитата Сообщение от Croessmah Посмотреть сообщение
char str[] = {0xD0, 0xB0, 0xD0, 0xB1, 0xD0, 0xB2, 0x00};//utf-8 строка с кириллице
это не "абв"
0
Миниатюры
Кирилица в URL запросе  
Don't worry, be happy
17172 / 10055 / 1935
Регистрация: 27.09.2012
Сообщений: 25,050
Записей в блоге: 1
30.04.2018, 22:46 5
JIawliet, так у тебя вывод не в utf-8.
http://rextester.com/QBYF3485

Из url'а получаешь utf-8 строку, а в какую кодировку её потом перевести - это уже от потребностей.
И да, там переделал на unsigned char.
1
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 396
01.05.2018, 11:05  [ТС] 6
Croessmah, у меня в программе есть std::string aaa("абв")... мне приходит char bbb[XXX] = "%D0%B0%D0%B1%D0%B2", те же "абв" но в utf8, пока все верно?? вот.. получается что мне нужно из utf8 перевести в какую-то неизвестную кодировку, чтоб программа могла проверить aaa == bbb, да?

Добавлено через 12 часов 11 минут
в общем все упиралось в эти 2 строчки кода:
C++
1
2
MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, wch, sz);
WideCharToMultiByte(CP_ACP, 0, wch, -1, chNew, sz, nullptr, nullptr);
нет ли аналога на C++? что-то посимпатичней, без создания нескольких буферов, колдовства с размерами строк и прочих прелестей....
0
Don't worry, be happy
17172 / 10055 / 1935
Регистрация: 27.09.2012
Сообщений: 25,050
Записей в блоге: 1
01.05.2018, 11:21 7
http://en.cppreference.com/w/cpp/locale/codecvt
http://en.cppreference.com/w/c... decvt_utf8 (deprecated in C++17)
0
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 396
01.05.2018, 11:29  [ТС] 8
Croessmah, да вчера игрался с этой библиотекой... какая-то странная в VS17 поддержка для нее... линкер ругается, нужно менять char16_t на unsigned short... и если с преобразованием ut8 в utf16 вроде как все ясно, то я не совсем понимаю, как utf16 преобразовать к CP_ACP с помощью этой библиотеки...
0
672 / 288 / 99
Регистрация: 04.07.2014
Сообщений: 810
01.05.2018, 11:35 9
Цитата Сообщение от JIawliet Посмотреть сообщение
чтоб программа могла проверить aaa == bbb, да?
А кто тебе мешает сразу в utf-8 сравнивать?

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
  std::string a = "\xD0\xB0\xD0\xB1\xD0\xB2";
  std::string b = u8"абв";
 
  std::cout << (a == b) << std::endl;
 
  return 0;
}
Добавлено через 1 минуту

Не по теме:

нет ли аналога на C++?
QString

1
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 396
01.05.2018, 11:41  [ТС] 10
Цитата Сообщение от AlexVRud Посмотреть сообщение
А кто тебе мешает сразу в utf-8 сравнивать?
хочется по человечески сделать и разобраться... может я хочу на форму вывести результат, но меня никак не устраивает "\xD0\xB0\xD0\xB1\xD0\xB2"

Цитата Сообщение от AlexVRud Посмотреть сообщение
QString
это ж Qt... тогда пойдем дальше, еще есть TString и... что там у нас в MFC?

в С++ я так понял, только std::codecvt.... как тогда это лечится?:
0
Миниатюры
Кирилица в URL запросе  
89 / 87 / 33
Регистрация: 20.07.2016
Сообщений: 396
01.05.2018, 11:42  [ТС] 11
Ошибка LNK2001 неразрешенный внешний символ ""__declspec(dllimport) public: static class std::locale::id std::codecvt<char16_t,char,struct _Mbstatet>::id" (__imp_?id@?$codecvt@_SDU_Mbstatet@@@std@@2V0locale@2@A)" Tests C:\Programs\Visual Studio\Tests\Tests\Tests.obj 1
0
Don't worry, be happy
17172 / 10055 / 1935
Регистрация: 27.09.2012
Сообщений: 25,050
Записей в блоге: 1
01.05.2018, 11:54 12
Цитата Сообщение от JIawliet Посмотреть сообщение
в С++ я так понял, только std::codecvt.... как тогда это лечится?
Есть еще http://en.cppreference.com/w/cpp/string/multibyte
А можно взять какую-нибудь простую библиотеку для работу с utf-8.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2018, 11:54

Кирилица в консоли
С CSharp перешол на C++, начал с азов создаю консольное приложение, без ошибок все отлично, но...

В погоне за URL или "ловим" URL и заголовок активных вкладок в браузерах
Здравствуйте, уважаемые обитатели форума. Каюсь, на форум захожу только за советом от бывалых...

Кирилица в запросе SELECT LIKE
Здравствуйте! Перекопал MSDN, Google, но ничего не смог найти. Коннект к БД MS Access (или это...

Русский текст в get запросе в url
Помогите пожалуйсто на моём примере, как сделать так если я в гет запросе посылаю слово кирилицей...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.