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

Не получается вставить Юникод в строку

14.12.2019, 20:40. Показов 2243. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно вставить символ "█".
Пробовал двумя способами:

1-й способ:
C++
1
cout << "Text1 \u2588 Text2"
Вывод: Text1 тЦИ Text2

2-й способ:
C++
1
wcout << "Text1 \u2588 Text2"
Вывод: Text1

Что делать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2019, 20:40
Ответы с готовыми решениями:

Как получить юникод строку
например из &quot;Привет всем!&quot;, получаем &quot;...

Преобразовать строку из КОИ-8 в Юникод и обратно
Написать программу, преобразовывающую данную строку из 8-битной системы кодирования (КОИ-8) в...

Записать юникод строку в конец файла
Внезапно возник ступор с тривиальной задачей. Необходимо записать юникод-строку в конец текстового...

Как перекодировать строку StreamReader.ReadLine() в Юникод?
Всем привет. Значит такая проблема. Есть текстовый файл в кодировке ANSI 1251 , открывая его и...

14
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
14.12.2019, 21:27 2
Цитата Сообщение от Turbo_Pgmer_132 Посмотреть сообщение
Что делать?
вставить CP866 (это под windows):
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    char c = 219;
    std::cout << "Text1" << c << "Text2";
 
    return 0;
}
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.12.2019, 21:32 3
Перед строкой ещё буква L должна быть:

C++
std::wcout << "Text1 \u2588 Text2\n";
Под linux'ом во всяком случае работает. Правда у меня вместо квадратика рисуется вопросительный знак. Вероятно, что-то с шрифтами не так
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
14.12.2019, 21:35 4
Цитата Сообщение от Evg Посмотреть сообщение
Под linux'ом во всяком случае работает.
под виндой не пашет, только первое слово Text1 выводит
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
14.12.2019, 21:38 5
Поставил \u0431 (русская буква "б") - всё равно печатается вопросительный знак. Хотя в коде строка закодировалась как положено. Т.е. дело НЕ в шрифтах
0
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
14.12.2019, 23:16 6
Цитата Сообщение от _stanislav Посмотреть сообщение
под виндой не пашет
у меня так пашет:
C++
1
2
    std::locale::global(std::locale(".866"));
    std::wcout << L"Text1 \u2588 Text2\n";
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
15.12.2019, 13:05 7
Вот так пашет под линуксом

C++
#include <iostream>
#include <locale>
 
int main (void)
{
  std::locale::global(std::locale("Russian"));
  std::wcout << L"Text1 [\u2588] Text2\n";
}
Всё равно не пойму, почему внутри программы надо делать какие-то ОС-зависимые приседания. Ведь по смыслу нужно настроить локаль снаружи от программы, а внутри программа должна оставаться одинаковой для всех

Добавлено через 33 секунды
Квадратные скобки - это для наглядности
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
15.12.2019, 13:13 8
Цитата Сообщение от Evg Посмотреть сообщение
ОС-зависимые приседания.
ты про std::locale(".866"), std::locale("Russian") ?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
15.12.2019, 13:25 9
Да

В моём понимании из программы нужно удалять std::locale (ну или любой другой интерфейс, который настраивает локаль). Настройкой должен заниматься пользователь, выставляя в программном окружении требуемую локаль. Но так у меня не получилось
0
6 / 3 / 0
Регистрация: 19.03.2019
Сообщений: 149
16.12.2019, 08:35  [ТС] 10
Сообщение было удалено пользователем
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
16.12.2019, 09:07 11
Цитата Сообщение от Evg Посмотреть сообщение
Настройкой должен заниматься пользователь, выставляя в программном окружении требуемую локаль.
много вы от пользователя хотите)
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
16.12.2019, 10:16 12
Цитата Сообщение от lArtl Посмотреть сообщение
много вы от пользователя хотите)
Т.е. в твоём понятии является нормальным втыкать в программу код std::locale("Russian") и поставлять эту программу в страны, где про русский язык (точнее, локаль) ничего не знают?
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
16.12.2019, 11:16 13
Цитата Сообщение от Evg Посмотреть сообщение
Т.е. в твоём понятии является нормальным втыкать в программу код std::locale("Russian") и поставлять эту программу в страны, где про русский язык (точнее, локаль) ничего не знают?
"в моём понятии" отдавать пользователю выяснять какая там у него локаль, куда то там ее вписывать и тд не является нормальным.
0
"C with Classes"
1646 / 1403 / 523
Регистрация: 16.08.2014
Сообщений: 5,877
Записей в блоге: 1
16.12.2019, 12:21 14
Evg, с этими локалями явно не все в порядке и не мы одни это заметили, не удобная и противная система.

Добавлено через 1 минуту
в свое время набедокурили от нехватки памяти, теперь мучаемся.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
16.12.2019, 15:43 15
Цитата Сообщение от lArtl Посмотреть сообщение
"в моём понятии" отдавать пользователю выяснять какая там у него локаль, куда то там ее вписывать и тд не является нормальным
При установке винды, по-моему прямо во время процесса установки, появляются понятные для пользователя настройки типа "выбрать язык" или что-то типа такого. Нормальный программный обвес должен работать таким образом, чтобы эти настройки трансформировались во что-то, что исключает необходимость программисту заниматься принудительным втыканием вызовов std::locale в код. Вполне возможно, что на самом деле всё так и сделано, а проблема в том, что никто из нас не знает, как этим правильно пользоваться. То, что всюду на орумах торчат примеры с std::locale не обязательно означает, что именно так и надо решать проблему в самом общем случае

Цитата Сообщение от _stanislav Посмотреть сообщение
Evg, с этими локалями явно не все в порядке и не мы одни это заметили, не удобная и противная система
Я для себя проблему вижу в другом - я не понимаю, как они работают. Точнее, мне вроде бы как понятен задуманный принцип их работы, но я не понимаю, как его правильно реализовать в коде программы. Просто на практике мне это никогда не было нужно, потому и не имею полезного опыта или знаний
0
16.12.2019, 15:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2019, 15:43
Помогаю со студенческими работами здесь

Как получить из PWideChar обычную юникод-строку?
Есть заполненная структура TSHELLEXECUTEINFOW. Заполнена вроде правильно, так как без проблем все...

Как объявить строку, которая юникод, содержащую кириллицу?
#include &lt;windows.h&gt; //#include &lt;locale.h&gt; int main() { //setlocale(LC_ALL, &quot;Russian&quot;);...

Двунаправленный линейный список строк. Вставить строку, удалить строку и заменить строку
3 двунаправленный линейный список строк.требуется вставить строку после строки с номером и удалить...

Строки. Перед (после) каждого вхождения символа C в строку S1 вставить строку S2
Даны строки S1, S2 и символ C. Перед (после) каждого вхождения символа C в строку S1 вставить...

Перед1|после2 каждого вхождения символа C в строку S1 вставить строку S2
Даны строки S1, S2 и символ C. Перед1|после2 каждого вхождения символа C в строку S1 вставить...

Перед (после) каждого вхождения символа C в строку S1 вставить строку S2
Даны строки S1, S2 и символ C. Перед (после) каждого вхождения символа C в строку S1 вставить...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru