0 / 0 / 0
Регистрация: 22.04.2018
Сообщений: 26
|
||||||
1 | ||||||
Кириллица и wcout27.10.2019, 18:48. Показов 5657. Ответов 7
Метки нет (Все метки)
Приветствую!
столкнулся с проблемой, что если перед wcout использовать cout, то портится вывод текста в консоль:
игрался с разными параметрами setlocale(LC_ALL,"") ОС убунта линукс, локаль ru_RU.utf8 компилятор g++ исходник в utf8
0
|
27.10.2019, 18:48 | |
Ответы с готовыми решениями:
7
Подсчитать количество вхождений буквы (кириллица) в строку (кириллица) Использование wcout Std::wcout не выводит сообщение Wcout: Вывод непонятных символов |
Заблокирован
|
|
09.04.2020, 16:51 | 2 |
Братец, cout это базовый поток вывода в C++, а установка локали setlocale - это оператор чистого базового языка Си, в котором "широкие" строки изначально не применялись и для обработки языков, отличных от латиницы, ввели тип wchar_t и оператор вывода wprint.
Если в локали все прописано верно, то под Linux вывод будет верный. Чтобы проверить свою текущую настроенную локаль, то после оператора setlocale(LC_ALL, "rus") выведи через cout итог установки твоей локали оператором - cout<<setlocale(LC_ALL, NULL) . Увидишь, поставил ли русскую локаль или все-таки нет. Если будет ответ в консоли типа "C", то ни фига не поставил и текущая локаль - латиница языка Си. В C++ Linux проблем с локалью нет, так как по умолчанию используется язык твоей операционки и utf8 рулит.
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
09.04.2020, 20:04 | 3 |
Чушь. Пруфов, так понимаю, не будет? Ок, вот опровержение (источник):
0
|
Заблокирован
|
|
17.04.2020, 12:21 | 4 |
Раскоменть все строки, потом:
4-ю строку переделай на : std::wcout<<setlocale(LC_ALL,"")<<endl; тогда у тебя выведется твой "Привет мир" (локаль в wcout пойдет выводить) а если 4-й строку переделаешь на: std::cout<<setlocale(LC_ALL,"")<<endl; - тогда у тебя выведется твой TEST(локаль в cout пойдет). Элементарно, Ватсон, в Линуксе все потоки в основном простейшие в виде обычного файла. Представь, что ты пытаешься запихать в один и тот же файл разноформатные строки, например, одну строку формата ASCII, а другую строку формата utf-8. Естественно, что система может запихать все до кучи, а выведет только то, что соответствует локали данного файла-потока. Добавлено через 18 минут Все верно толкуют, в С++ под Линукс проблем нет с локалью, так как ОС изначально заточена под однобайтовые и многобайтовые символы. Если проверять локаль в коде С++, то можно проще, чем в Си, проверить текущую локаль с помощью оператора с пустыми ковычками: std::cout<<setlocale(LC_ALL,"")<<endl; - для вывода в стандартную консоль-файл std::wcout<<setlocale(LC_ALL,"")<<endl; - для вывода "широких строк" в консоль-файл И путать не надо божий дар с яичницей, сперва точно определитесь, какой файл вы компилируете: чисто Си-шный или C++, там есть разница в применении локалей и строк текста. Зачем ссылаться на чьи-то комментарии и никем не проверенные тексты??? Ваши ссылки - вообще ни о чем, не доказательство.
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
17.04.2020, 12:49 | 5 |
0
|
Заблокирован
|
|
17.04.2020, 13:02 | 6 |
Ну Ваши "тесты" по C++ ни о чем тоже не говорят ;-)
Если бы Вы на чистых Сях блеснули мозгом - тады ой, признаю боженьку) А пока Вы - так, засланный для провокации казачок, чья задача - вступить в перепалку, спровоцировать, пожаловаться, отсечь и заблокировать умного дядьку))) А то на фоне какого-то дядьки Ваш мозг прямо-таки останется невостребованным в данном форуме)))
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
17.04.2020, 13:10 | 7 |
Умные дядьки функции операторами не называют и знают русский язык. Всё, "умный дядька", свободен, гуляй.
0
|
Заблокирован
|
||||||
17.04.2020, 15:31 | 8 | |||||
Сам прогуляйся, "знаток" русскАгА языка)))
Я так понял, ты тот самый "задира", который потом всех и блокирует))) Не стыдно так "подрабатывать"??? Мягко говоря, по-детски))) Лет сколько тебе??? Шишнадцать наверное??? ))) Добавлено через 1 час 54 минуты //// Для справки ///////////////////////////////////////////////////////////////////// Кто программировал(программирует) на самом низком уровне ассемблера, тот прекрасно знает, что на самом ДНЕ КОДА есть только Системные вызовы(то бишь функции) и Системные прерывания процессора. А то, что написал знаток кода, это последовательность текста, падающего словами и значения в регистры процессора. Падает номер функции в регистр - MOV или PUSH (с параметрами или операндами др. словами), падает оператор(команда) в регистр - снова MOV или PUSH (с параметрами или операндами). А если нужно запустить Системный вызов (прерывание) - это уже INT - отличается от всей писанины программиста))) Что "функция", что "оператор" программиста - все это одинаково для процессора - несколько манипуляций с регистрами. И простой оператор в тексте программы может быть более громоздким, чем функция. Вот вам пример простенького вывода одной текстовой строки аналогами Ассемблера для 32-битного проца, посмотрите, что куда упало, когда вы написали всего один оператор где-нибудь в С++, типа Hello world":
0
|
17.04.2020, 15:31 | |
17.04.2020, 15:31 | |
Помогаю со студенческими работами здесь
8
Cout и wcout. Русские буквы wcout, wfstream в Code Blocks Часто ли вы пользуетесь wchar_t, wstring, wcout, wcin? Какие в них недостатки? Error 1 error C2447: '{' : missing function header (old-style formal list?) и почему не работает ? и подскажите как пользоваться wcout Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |