Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 02.10.2022
Сообщений: 86

Искажение кириллицы при переводе из Wstring в string

24.09.2023, 12:01. Показов 865. Ответов 8

Студворк — интернет-сервис помощи студентам
Товарищи программисты, пишу следующую программу: из буфера обмена у меня берется текст, программа его должна корректно обработать. С латиницей все нормально работает - превосходно берется в буфер и переводится из wstring в string, но с кириллицей уже так не особо работает.
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
#include <iostream>
#include <windows.h>
#include <locale>
#include <codecvt>
 
int main() {
    std::setlocale(LC_CTYPE, ".UTF-8");
 
    if (OpenClipboard(NULL)) {
        HANDLE hData = GetClipboardData(CF_UNICODETEXT);
        if (hData != NULL) {
            wchar_t* text = static_cast<wchar_t*>(GlobalLock(hData));
            if (text != NULL) {
                std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
                std::wstring wideStr(text);
                std::string str = converter.to_bytes(wideStr);
                GlobalUnlock(hData);
 
                std::cout << str << std::endl;
            }
        }
        CloseClipboard();
    }
 
    return 0;
}
конечно, есть чудо строка
C++
1
std::setlocale(LC_CTYPE, ".UTF-8");
, которая позволяет выводить в консоль кириллицу из string, но в самом string остаются кракозябрики, а с ними нормально работать невозможно

Может, кто-то с таким сталкивался? Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2023, 12:01
Ответы с готовыми решениями:

Искажение кириллицы при отправке (клиент-сервер)
Здравствуйте. Когда-то давно написал клиент-серверное приложение, суть которого состоит в передаче сообщений клиентам через сервер (чат)....

Конфузы с русскими буквами при переводе из System::String^ в std::string
Использую такую конструкцию: string stdstr; for(int i=0;i&lt;sysstr-&gt;Length;++i) stdstr+=sysstr; Для английского текста все...

Квадраты при переводе из char и string
Здравствуйте! Пробую написать генератор паролей, но при попытке перевода из char в string выдает квадратики.Не подскажите как это...

8
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.09.2023, 12:10
Цитата Сообщение от VladislavSokol Посмотреть сообщение
но в самом string остаются кракозябрики,
Что это означает?

Попробую угадать: когда вы делаете поэлементный доступ к этому string, то вы не получаете "символы"? Ну так это естественно, в utf-8 символ != байту в общем случае, а string предоставляет элементы именно как байты, а не как символы.

Так что правильным решением в вашем случае будет ничего никуда не переводить, а оставаться в рамках wstring и работать с ним. Вам не нужен string.
1
1 / 1 / 0
Регистрация: 02.10.2022
Сообщений: 86
24.09.2023, 12:49  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Попробую угадать
Разве нет особой команды по конвертации из одного формата в другой? Просто с wstring ранее не работал.....Видимо, все в жизни стоит попробовать
Миниатюры
Искажение кириллицы при переводе из Wstring в string  
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.09.2023, 12:53
VladislavSokol, то, что вы видите в окне IDE, просто результат несоответствия кодировок, а не того, что содержмиое str вдруг "испортилось". IDE просто пытается интерпретировать содержимое как cp1251 и все. Отсюда эти "крякозябры".
1
1 / 1 / 0
Регистрация: 02.10.2022
Сообщений: 86
24.09.2023, 13:00  [ТС]
DrOffset, и все же, могу ли я из wstring перейти к string и далее взаимодействовать с последним (string)?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.09.2023, 13:06
Цитата Сообщение от VladislavSokol Посмотреть сообщение
и все же, могу ли я из wstring перейти к string и далее взаимодействовать с последним (string)?
Так вы и перешли. У вас все правильно.
Просто отладчик VS не понимает utf-8 в string корректно.
1
Эксперт .NET
 Аватар для Rius
13020 / 7586 / 1660
Регистрация: 25.05.2015
Сообщений: 23,062
Записей в блоге: 14
24.09.2023, 13:14
Цитата Сообщение от VladislavSokol Посмотреть сообщение
Разве нет особой команды по конвертации из одного формата в другой? Просто с wstring ранее не работал.....Видимо, все в жизни стоит попробовать
Видите там на скриншоте P... P... P....?
Это характерный признак кириллицы в кодировке utf-8. У неё два байта на символ, и первый байт равен 0xD0 или 0xD1.
0xD0 == 208. 208 - 256 = - 48, это как раз P.
1
1 / 1 / 0
Регистрация: 02.10.2022
Сообщений: 86
24.09.2023, 13:20  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Видите там на скриншоте P... P... P....?
Вижу Потому я и пришел сюда в надежде, что есть способ как-то обойти/обхитрить систему
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
24.09.2023, 13:29
VladislavSokol, еще раз повторю, что тут нечего обходить. У вас в строке лежит utf-8, как вы и хотели. Проблема только в том, что VS вам ее неправильно показывает.

В общем-то решить это можно, вот:
https://learn.microsoft.com/ru... ew=vs-2022
Выглядеть будет так:


Но на суть и правильность вашего кода это никак не повлияет, только на эстетическое чувство того, что в отладчике все показывается правильно.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2023, 13:29
Помогаю со студенческими работами здесь

Ошибка при переводе из String в Byte. Delphi7
Здравствуйте, такая проблема. Хочу чтобы данные из таблицы меняли цвет фигуры. но когда присваиваю значение, то появляется ошибка....

При переводе из double в string теряются знаки после запятой
Перевожу переменную double в string stringstream sst; string f_str; double f=12345.99; sst &lt;&lt; f; f_str=...

При переводе string в long double теряется дробная часть
Помогите с программой. При переводе string в long double дробная часть становится равной нулю(не зависит от длины числа). #include...

При переводе из String в Real теряется "0"
При переводе из строки в вещественный тип, если в начале строки стоит 0, то он пропадает. Подскажите как его сохранить? Добавлено...

Из string в wstring
Как можно получить wstring-строку из string-строки? (символы в строке латинские, поэтому проблем вроде бы возникать не должно)


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru