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

Отображение русских букв в SFML через переменную

08.02.2019, 21:36. Показов 15498. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу игру на SFML. В частности функцию, которая считывает с файла русские буквы, в дальнейшем эти буквы отрисовываются на экран игры.
Как я понял существует один способ корректного отображения русс букв в SFML, и заключается он в том, чтобы добавить префикс L перед строкой. Но мне необходимо передавать строку не напрямую в функцию setString(), а через переменную recordline. Как в таком случае добавить этот префикс L?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
std::ifstream file;
std::string recordLine;
 
void fun(..., sf::Text & Text) {
    setlocale(LC_ALL, "ru");
    file.open(path);
    while (...)
    {
        std::getline(file, recordLine);
 
        if (...) {
                do { 
                   Text.setString(L"Русский"); //OK 
                    Text.setString(L"" + recordline); //error ?????????????????
 
                } while (...);
            }
        }
        
    }
    file.close();
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2019, 21:36
Ответы с готовыми решениями:

Отображение русских букв
Наверное, избитая тема, но у меня ситуация немного не стандартная. Гуглил, но решения не сыскал. Пробовал разные кодировки, но браузер не...

Корректное отображение русских букв.
Столкнулся с проблемой корректного отображения русских букв. Раньше для того что бы буквы отображались корректно я пользовался этой...

Не правильное отображение русских букв
Раньше было все пучком, а теперь жесть ;) http://бмфан.рф/dynamic.php По ссылке вы можете увидеть знаки вопроса вместо букв в левом меню,...

18
51 / 37 / 14
Регистрация: 05.08.2016
Сообщений: 187
08.02.2019, 22:07
В Visual Studio в настройках проекта можно выбрать набор символов Юникод, вроде тогда не нужно использовать L.
Нужно использовать wstring, тогда L не нужен.
Миниатюры
Отображение русских букв в SFML через переменную  
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 102
08.02.2019, 22:21  [ТС]
Pavel250,
Ничего не изменилось. При преобразовании string в wstring следующем образом,
C++
1
2
std::wstring wstr(recordLine.begin(), recordLine.end());
      Text.setString(wstr);
выводится на экран вместо букв вот что:
Миниатюры
Отображение русских букв в SFML через переменную  
0
Неэпический
 Аватар для Croessmah
18147 / 10731 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
08.02.2019, 22:31
kalambek, для начала разберитесь с тем, какая кодировка файла.
0
51 / 37 / 14
Регистрация: 05.08.2016
Сообщений: 187
08.02.2019, 22:34
А нельзя recordLine сразу объявить как wstring?
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 102
08.02.2019, 22:46  [ТС]
Croessmah, какую не используй, ничего не меняется. Только вот если поменять на Юникод, в таком случае не выводится вообще ничего
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 102
08.02.2019, 22:50  [ТС]
Pavel250, объявил. Русских букв по-прежнему нет, но вместо квадратиков теперь отрисовываются символы
Изображения
 
0
Неэпический
 Аватар для Croessmah
18147 / 10731 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
08.02.2019, 22:56
Цитата Сообщение от kalambek Посмотреть сообщение
какую не используй, ничего не меняется.
Продолжим. Для начала разберитесь с тем, какая кодировка файла.
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 102
08.02.2019, 22:59  [ТС]
Croessmah, Продолжим. ANSI
0
Неэпический
 Аватар для Croessmah
18147 / 10731 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
08.02.2019, 23:01
kalambek, в ANSI нет кириллических символов.
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 102
08.02.2019, 23:04  [ТС]
Croessmah, в Utf-8 зато есть, только если поменять на него, ничего не изменится
0
51 / 37 / 14
Регистрация: 05.08.2016
Сообщений: 187
08.02.2019, 23:10
А разве UTF-8 не Юникод?

Добавлено через 3 минуты
Croessmah, уже решал подобное
SFML. Кодировки и шрифты для кириллицы
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
08.02.2019, 23:25
Лучший ответ Сообщение было отмечено kalambek как решение

Решение

kalambek, wstring + wcout + файл в UTF-16.

Добавлено через 10 минут
Цитата Сообщение от kalambek Посмотреть сообщение
При преобразовании string в wstring следующем образом,
Так нельзя преобразовывать.
Если в std::string лежит utf-8, то преобразовать можно так:
C++
1
2
3
4
5
6
7
8
9
10
#include <locale>
 
//...........
 
std::string recordLine;
 
//..................
 
std::wstring_convert<std::codecvt_utf8<wchar_t>> cv;
Text.setString(cv.from_bytes(recordLine));
Правда этот способ может не работать по причине отсутствия поддержки в runtime.
В этом случае придется использовать какой-либо платформозависимый способ конвертации.
В любом случае просто скопировать байты в wstring - недостаточно.
1
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 102
08.02.2019, 23:28  [ТС]
Цитата Сообщение от Pavel250 Посмотреть сообщение
А разве UTF-8 не Юникод?
может и так, я о предложенных блокнотом кодировках говорю

Цитата Сообщение от Pavel250 Посмотреть сообщение
уже решал подобное
то что в случае прямой передачи строки в ф-цию setString() нужно добавить префикс L я понял ещё до того как создал эту тему
Миниатюры
Отображение русских букв в SFML через переменную  
0
0 / 0 / 0
Регистрация: 07.04.2015
Сообщений: 102
08.02.2019, 23:32  [ТС]
DrOffset, рабочий способ. Спасибо!
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
08.02.2019, 23:34
kalambek, в блокноте UTF-16 обозначается как "Юникод". Так что способ с чтением напрямую wstring тоже должен сработать.
0
Неэпический
 Аватар для Croessmah
18147 / 10731 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
08.02.2019, 23:39
Цитата Сообщение от kalambek Посмотреть сообщение
в Utf-8 зато есть, только если поменять на него, ничего не изменится
Изменится. В файле будет лежать уже Юникод.
Цитата Сообщение от DrOffset Посмотреть сообщение
Если в std::string лежит utf-8, то преобразовать можно так:
В SFML можно сразу состряпать sf::String из utf8: sf::String::fromUtf8.

Цитата Сообщение от kalambek Посмотреть сообщение
ничего не изменится
Вот примерчик загрузки из utf8. Под виндой не проверял.
sfml_ct.zip
2
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
08.02.2019, 23:41
Цитата Сообщение от Croessmah Посмотреть сообщение
В SFML можно сразу состряпать sf::String из utf8: sf::String::fromUtf8.
Отлично. Это лучше гораздо.
0
Неэпический
 Аватар для Croessmah
18147 / 10731 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
08.02.2019, 23:51
DrOffset, конечно, в SFML и из string с ANSI может кириллицу загрузить, но нужно указать локаль вторым параметром конструктора sf::String. Имхо, не надо так делать, лучше файл в Юникод конвертнуть и работать. Вообще, внутри sf::String представляет собой std::basic_string<Uint32> с UTF-32 кодировкой.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.02.2019, 23:51
Помогаю со студенческими работами здесь

Неправильное Отображение Русских Букв
Всем привет. Обновил на свою голову клиента у пользователя (до 9.0.1 англ. стандартного). Сервер - 8.5.3. Юзер открывает старую базу...

Некорректное отображение русских букв
Извиняюсь что вечно с вопросами но я не понимаю в чем дело. После настройки Apache 2.2.15-win32-x86-openssl-0.9.8m,...

Некоректное отображение русских букв
Здравствуйте товарищи. Есть запрос на добавление данных в присоединенный dbf файл. Если этот запрос запустить ACCESS'oM, то все...

Ввод и отображение русских букв
Попался вот такой экзаменационный билет: Напишите программу, которая допускает ввод и отображение русских букв независимо от того,...

Некоректное отображение русских букв vc2010
В консольных приложениях в 2010 не отображаются корректно русские буквы .В чем причина.Заранее благодарен.


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
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. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru