|
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
|
||||||||||||||||
Различие функций setlocale() и SetConsoleCP()/SetConsoleOutputCP()20.06.2013, 01:58. Показов 87422. Ответов 16
Метки нет (Все метки)
Вопрос состоит в следующем... Можно проверить с помощью функций GetACP(), GetOEMCP(), GetConsoleCP(), GetConsoleOutputCP(), что функция setlocale НЕ МЕНЯЕТ НИКАКИХ КОДИРОВОК в потоках ввода/вывода. Однако, если использовать функцию SetConsoleOutputCP(1251) или SetConsoleCP(1251), то после них setlocale() не работает! Особенно удивительно относительно функции SetConsoleCP(1251), она то здесь при чем?!!! Она отвечает только за ввод, но не вывод символов на экран, поэтому портить, по идее, ничего не должна! ?
листинг - 1
Во-первых, почему CP866? Во-вторых, при чем тут функция изменения ввода SetConsoleCP(866), если мы ничего не вводим?
0
|
||||||||||||||||
| 20.06.2013, 01:58 | |
|
Ответы с готовыми решениями:
16
Не работают функции SetConsoleCP() и SetConsoleOutputCP() Setlocale vs. SetConsoleCP
|
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 20.06.2013, 02:11 | |
|
Вам не понять всю любовь и идеологию шиндоуз, особенно по части кодировок.
Если указываем кодировку 1251, то необходимо выбрать в свойствах консоли шрифт Lucida Console. setlocale - стандартная функция, SetConsoleOutputCP() - проприетарная. Что в ней самой творится один microsoft знает, вполне вероятно, что он вставляет палки в колеса работе функции setlocale(). Не за чем вам мешать просто две эти функции. Остановитесь на чем-то одном и радуйтесь.
0
|
|
|
57 / 9 / 4
Регистрация: 14.06.2013
Сообщений: 129
|
|
| 20.06.2013, 15:33 [ТС] | |
|
Как раз и хочется понять, куда вставвляются палки... Чтобы понять механизм работы функций setlocale() и SetConsoleOutputCP()
Про Lucida Console - понятно, но это здесь не причем... Добавлено через 17 минут Единственный вывод, который напрашивается - это что setlocale() ПЕРЕВОДИТ текст из редактора кода в указанную кодировку перед выводом на консоль или в файл, но НЕ МЕНЯЕТ кодировку самой консоли или другого интерфейса... Поэтому при изменении кодировки консоли на 1251 текст оказывается уже переведенным в кодировку 866, и получаются крокозябры... Значит, нужно установить кодировку консоли - тоже 866... Но setlocale() работает только с выводом текста, поэтому при вводе по-любому, придется использовать SetConsoleOutputCP(1251). Однако, тогда остается не понятным, как может портить ВЫВОД на консоль функция изменения кодировки ВВОДА - SetConsoleCP()?... Добавлено через 13 часов 1 минуту В общем, методом экспериментов можно сделать такой вывод: 1. SetConsoleOutputCP() устанавливает кодировку ВЫВОДА на консоль 2. SetConsoleCP() устанавливает кодировку ВВОДА из консоли И ИЗ РЕДАКТОРА КОДА 3. setlocale(LC_ALL,"1251") проверяет, какая кодировка установлена сейчас, и если она не 1251, то меняет ее на 1251, а если уже 1251, то ничего не делает. Поэтому, если уже установлена кодировка ввода ИЗ РЕДАКТОРА функцией SetConsoleCP(1251), то после нее setlocale() ничего менять не будет, и попросту выведет символы по нумерации CP866, решив, что они и так уже в windows 1251. Если же уже выполнена функция SetConsoleOutputCP(1251), то setlocale() проверит, какая кодировка ввода установлена, и обнаружит, что кодировка ввода по прежнему CP866, поэтому она возьмет номера этих уже преобразованных символов (с помощью SetConsoleOutputCP(1251)), НО ИЗ кодовой таблицы cp866 и выведет символы с этими номерами из таблицы windows 1251.
1
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||
| 20.06.2013, 16:11 | |||||||
|
Вот такой код, при вводе русских букв, не будет работать как надо:
2
|
|||||||
|
21 / 21 / 5
Регистрация: 17.12.2014
Сообщений: 322
|
||||||
| 11.12.2016, 07:35 | ||||||
|
если вывести на экран через SetConsoleCP, кстати я так понимаю что кодировку консоли нужно вернуть назад?
то символика соответствует и выводу в файл ASCII http://foxtools.ru/ASCII#1251 как то получается что если ничего не делать то в консоли одно, в файле другое.... если все отключить то кириллица есть, но не там....но экспорт в тхт остаётся в ascii-1251 Кликните здесь для просмотра всего текста
Текущая кодовая страница: 866 Текущая кодовая страница: 866 33 ёшьтюыqwe ! 34 ёшьтюыqwe " 35 ёшьтюыqwe # 36 ёшьтюыqwe $ 37 ёшьтюыqwe % 38 ёшьтюыqwe & 39 ёшьтюыqwe ' 40 ёшьтюыqwe ( 41 ёшьтюыqwe ) 42 ёшьтюыqwe * 43 ёшьтюыqwe + 44 ёшьтюыqwe , 45 ёшьтюыqwe - 46 ёшьтюыqwe . 47 ёшьтюыqwe / 48 ёшьтюыqwe 0 49 ёшьтюыqwe 1 50 ёшьтюыqwe 2 51 ёшьтюыqwe 3 52 ёшьтюыqwe 4 53 ёшьтюыqwe 5 54 ёшьтюыqwe 6 55 ёшьтюыqwe 7 56 ёшьтюыqwe 8 57 ёшьтюыqwe 9 58 ёшьтюыqwe : 59 ёшьтюыqwe ; 60 ёшьтюыqwe < 61 ёшьтюыqwe = 62 ёшьтюыqwe > 63 ёшьтюыqwe ? 64 ёшьтюыqwe @ 65 ёшьтюыqwe A 66 ёшьтюыqwe B 67 ёшьтюыqwe C 68 ёшьтюыqwe D 69 ёшьтюыqwe E 70 ёшьтюыqwe F 71 ёшьтюыqwe G 72 ёшьтюыqwe H 73 ёшьтюыqwe I 74 ёшьтюыqwe J 75 ёшьтюыqwe K 76 ёшьтюыqwe L 77 ёшьтюыqwe M 78 ёшьтюыqwe N 79 ёшьтюыqwe O 80 ёшьтюыqwe P 81 ёшьтюыqwe Q 82 ёшьтюыqwe R 83 ёшьтюыqwe S 84 ёшьтюыqwe T 85 ёшьтюыqwe U 86 ёшьтюыqwe V 87 ёшьтюыqwe W 88 ёшьтюыqwe X 89 ёшьтюыqwe Y 90 ёшьтюыqwe Z 91 ёшьтюыqwe [ 92 ёшьтюыqwe \ 93 ёшьтюыqwe ] 94 ёшьтюыqwe ^ 95 ёшьтюыqwe _ 96 ёшьтюыqwe ` 97 ёшьтюыqwe a 98 ёшьтюыqwe b 99 ёшьтюыqwe c 100 ёшьтюыqwe d 101 ёшьтюыqwe e 102 ёшьтюыqwe f 103 ёшьтюыqwe g 104 ёшьтюыqwe h 105 ёшьтюыqwe i 106 ёшьтюыqwe j 107 ёшьтюыqwe k 108 ёшьтюыqwe l 109 ёшьтюыqwe m 110 ёшьтюыqwe n 111 ёшьтюыqwe o 112 ёшьтюыqwe p 113 ёшьтюыqwe q 114 ёшьтюыqwe r 115 ёшьтюыqwe s 116 ёшьтюыqwe t 117 ёшьтюыqwe u 118 ёшьтюыqwe v 119 ёшьтюыqwe w 120 ёшьтюыqwe x 121 ёшьтюыqwe y 122 ёшьтюыqwe z 123 ёшьтюыqwe { 124 ёшьтюыqwe | 125 ёшьтюыqwe } 126 ёшьтюыqwe ~ 127 ёшьтюыqwe 128 ёшьтюыqwe А 129 ёшьтюыqwe Б 130 ёшьтюыqwe В 131 ёшьтюыqwe Г 132 ёшьтюыqwe Д 133 ёшьтюыqwe Е 134 ёшьтюыqwe Ж 135 ёшьтюыqwe З 136 ёшьтюыqwe И 137 ёшьтюыqwe Й 138 ёшьтюыqwe К 139 ёшьтюыqwe Л 140 ёшьтюыqwe М 141 ёшьтюыqwe Н 142 ёшьтюыqwe О 143 ёшьтюыqwe П 144 ёшьтюыqwe Р 145 ёшьтюыqwe С 146 ёшьтюыqwe Т 147 ёшьтюыqwe У 148 ёшьтюыqwe Ф 149 ёшьтюыqwe Х 150 ёшьтюыqwe Ц 151 ёшьтюыqwe Ч 152 ёшьтюыqwe Ш 153 ёшьтюыqwe Щ 154 ёшьтюыqwe Ъ 155 ёшьтюыqwe Ы 156 ёшьтюыqwe Ь 157 ёшьтюыqwe Э 158 ёшьтюыqwe Ю 159 ёшьтюыqwe Я 160 ёшьтюыqwe а 161 ёшьтюыqwe б 162 ёшьтюыqwe в 163 ёшьтюыqwe г 164 ёшьтюыqwe д 165 ёшьтюыqwe е 166 ёшьтюыqwe ж 167 ёшьтюыqwe з 168 ёшьтюыqwe и 169 ёшьтюыqwe й 170 ёшьтюыqwe к 171 ёшьтюыqwe л 172 ёшьтюыqwe м 173 ёшьтюыqwe н 174 ёшьтюыqwe о 175 ёшьтюыqwe п 176 ёшьтюыqwe - 177 ёшьтюыqwe - 178 ёшьтюыqwe - 179 ёшьтюыqwe ¦ 180 ёшьтюыqwe + 181 ёшьтюыqwe ¦ 182 ёшьтюыqwe ¦ 183 ёшьтюыqwe ¬ 184 ёшьтюыqwe ¬ 185 ёшьтюыqwe ¦ 186 ёшьтюыqwe ¦ 187 ёшьтюыqwe ¬ 188 ёшьтюыqwe - 189 ёшьтюыqwe - 190 ёшьтюыqwe - 191 ёшьтюыqwe ¬ 192 ёшьтюыqwe L 193 ёшьтюыqwe + 194 ёшьтюыqwe T 195 ёшьтюыqwe + 196 ёшьтюыqwe - 197 ёшьтюыqwe + 198 ёшьтюыqwe ¦ 199 ёшьтюыqwe ¦ 200 ёшьтюыqwe L 201 ёшьтюыqwe г 202 ёшьтюыqwe ¦ 203 ёшьтюыqwe T 204 ёшьтюыqwe ¦ 205 ёшьтюыqwe = 206 ёшьтюыqwe + 207 ёшьтюыqwe ¦ 208 ёшьтюыqwe ¦ 209 ёшьтюыqwe T 210 ёшьтюыqwe T 211 ёшьтюыqwe L 212 ёшьтюыqwe L 213 ёшьтюыqwe - 214 ёшьтюыqwe г 215 ёшьтюыqwe + 216 ёшьтюыqwe + 217 ёшьтюыqwe - 218 ёшьтюыqwe - 219 ёшьтюыqwe - 220 ёшьтюыqwe - 221 ёшьтюыqwe ¦ 222 ёшьтюыqwe ¦ 223 ёшьтюыqwe - 224 ёшьтюыqwe р 225 ёшьтюыqwe с 226 ёшьтюыqwe т 227 ёшьтюыqwe у 228 ёшьтюыqwe ф 229 ёшьтюыqwe х 230 ёшьтюыqwe ц 231 ёшьтюыqwe ч 232 ёшьтюыqwe ш 233 ёшьтюыqwe щ 234 ёшьтюыqwe ъ 235 ёшьтюыqwe ы 236 ёшьтюыqwe ь 237 ёшьтюыqwe э 238 ёшьтюыqwe ю 239 ёшьтюыqwe я 240 ёшьтюыqwe Ё 241 ёшьтюыqwe ё 242 ёшьтюыqwe Є 243 ёшьтюыqwe є 244 ёшьтюыqwe Ї 245 ёшьтюыqwe ї 246 ёшьтюыqwe Ў 247 ёшьтюыqwe ў 248 ёшьтюыqwe ° 249 ёшьтюыqwe • 250 ёшьтюыqwe · 251 ёшьтюыqwe v 252 ёшьтюыqwe № 253 ёшьтюыqwe ¤ 254 ёшьтюыqwe ¦ 255 ёшьтюыqwe * Текущая кодовая страница: 866 команда setlocale(LC_ALL, "Russian"); даёт плохой результат причем равный setlocale(LC_ALL, ".1251"); Кликните здесь для просмотра всего текста
Текущая кодовая страница: 866
Текущая кодовая страница: 866 33 символqwe ! 34 символqwe " 35 символqwe # 36 символqwe $ 37 символqwe % 38 символqwe & 39 символqwe ' 40 символqwe ( 41 символqwe ) 42 символqwe * 43 символqwe + 44 символqwe , 45 символqwe - 46 символqwe . 47 символqwe / 48 символqwe 0 49 символqwe 1 50 символqwe 2 51 символqwe 3 52 символqwe 4 53 символqwe 5 54 символqwe 6 55 символqwe 7 56 символqwe 8 57 символqwe 9 58 символqwe : 59 символqwe ; 60 символqwe < 61 символqwe = 62 символqwe > 63 символqwe ? 64 символqwe @ 65 символqwe A 66 символqwe B 67 символqwe C 68 символqwe D 69 символqwe E 70 символqwe F 71 символqwe G 72 символqwe H 73 символqwe I 74 символqwe J 75 символqwe K 76 символqwe L 77 символqwe M 78 символqwe N 79 символqwe O 80 символqwe P 81 символqwe Q 82 символqwe R 83 символqwe S 84 символqwe T 85 символqwe U 86 символqwe V 87 символqwe W 88 символqwe X 89 символqwe Y 90 символqwe Z 91 символqwe [ 92 символqwe \ 93 символqwe ] 94 символqwe ^ 95 символqwe _ 96 символqwe ` 97 символqwe a 98 символqwe b 99 символqwe c 100 символqwe d 101 символqwe e 102 символqwe f 103 символqwe g 104 символqwe h 105 символqwe i 106 символqwe j 107 символqwe k 108 символqwe l 109 символqwe m 110 символqwe n 111 символqwe o 112 символqwe p 113 символqwe q 114 символqwe r 115 символqwe s 116 символqwe t 117 символqwe u 118 символqwe v 119 символqwe w 120 символqwe x 121 символqwe y 122 символqwe z 123 символqwe { 124 символqwe | 125 символqwe } 126 символqwe ~ 127 символqwe 128 символqwe ? 129 символqwe ? 130 символqwe ' 131 символqwe ? 132 символqwe " 133 символqwe : 134 символqwe ┼ 135 символqwe ╪ 136 символqwe ? 137 символqwe % 138 символqwe ? 139 символqwe < 140 символqwe ? 141 символqwe ? 142 символqwe ? 143 символqwe ? 144 символqwe ? 145 символqwe ' 146 символqwe ' 147 символqwe " 148 символqwe " 149 символqwe 150 символqwe - 151 символqwe - 152 символqwe ? 153 символqwe T 154 символqwe ? 155 символqwe > 156 символqwe ? 157 символqwe ? 158 символqwe ? 159 символqwe ? 160 символqwe * 161 символqwe Ў 162 символqwe ў 163 символqwe ? 164 символqwe ¤ 165 символqwe ? 166 символqwe │ 167 символqwe 168 символqwe Ё 169 символqwe c 170 символqwe Є 171 символqwe < 172 символqwe ┐ 173 символqwe - 174 символqwe R 175 символqwe Ї 176 символqwe ° 177 символqwe + 178 символqwe ? 179 символqwe ? 180 символqwe ? 181 символqwe ч 182 символqwe 183 символqwe · 184 символqwe ё 185 символqwe № 186 символqwe є 187 символqwe > 188 символqwe ? 189 символqwe ? 190 символqwe ? 191 символqwe ї 192 символqwe А 193 символqwe Б 194 символqwe В 195 символqwe Г 196 символqwe Д 197 символqwe Е 198 символqwe Ж 199 символqwe З 200 символqwe И 201 символqwe Й 202 символqwe К 203 символqwe Л 204 символqwe М 205 символqwe Н 206 символqwe О 207 символqwe П 208 символqwe Р 209 символqwe С 210 символqwe Т 211 символqwe У 212 символqwe Ф 213 символqwe Х 214 символqwe Ц 215 символqwe Ч 216 символqwe Ш 217 символqwe Щ 218 символqwe Ъ 219 символqwe Ы 220 символqwe Ь 221 символqwe Э 222 символqwe Ю 223 символqwe Я 224 символqwe а 225 символqwe б 226 символqwe в 227 символqwe г 228 символqwe д 229 символqwe е 230 символqwe ж 231 символqwe з 232 символqwe и 233 символqwe й 234 символqwe к 235 символqwe л 236 символqwe м 237 символqwe н 238 символqwe о 239 символqwe п 240 символqwe р 241 символqwe с 242 символqwe т 243 символqwe у 244 символqwe ф 245 символqwe х 246 символqwe ц 247 символqwe ч 248 символqwe ш 249 символqwe щ 250 символqwe ъ 251 символqwe ы 252 символqwe ь 253 символqwe э 254 символqwe ю 255 символqwe я Текущая кодовая страница: 866 Для продолжения нажмите любую клавишу . . .
может эти функции просто эмитируют обычную команду CMD? system("chcp 1251"); //#include <cstdlib> //system("**");
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.12.2016, 10:41 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 16.10.2018
Сообщений: 3
|
||||||
| 10.11.2018, 10:58 | ||||||
|
Методом проб и ошибок созрело решение применительно на Visual Studio 2017:
Введите ваше имя Вася_Пупкин Здравствуйте, Вася_Пупкин
0
|
||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 10.11.2018, 11:06 | |
|
Разве SetConsoleCP() не до cin должна быть?
0
|
|
|
0 / 0 / 0
Регистрация: 16.10.2018
Сообщений: 3
|
|
| 10.11.2018, 13:20 | |
|
SetConsoleCP(1251) действует только для вывода второй части строки, т.е стороковой переменной Name. Если её прописать до
cin, то будут выходить крякозаблы.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 10.11.2018, 14:04 | |
|
SetConsoleCP() - для ввода.
0
|
|
|
0 / 0 / 0
Регистрация: 16.10.2018
Сообщений: 3
|
|
| 11.11.2018, 19:36 | |
|
Точнее для вывода переменной Name на консоль без крякозябров в русской кодировке.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.11.2018, 21:24 | |
|
Это обеспечивает 7-я строка.
0
|
|
|
7 / 7 / 0
Регистрация: 04.11.2016
Сообщений: 94
|
|
| 28.08.2022, 14:33 | |
|
Долгое время сам мучался с выводом кириллицы в среде DevC++ Embarcadero. Перепробовал уже все варианты SetConsoleOutputCP(1251), SetConsoleCP(1251), setlocale(LC_ALL, "Russian"), setlocale(0,""), добавлял в реестре HKEY_CURRENT_USER Console 32-битный DWORD все равно при всем при этом вывод был примерно таким: Ё~~!""/. Пока не выбрал тип компилятора TDM-GCC 9.2.0 32-bit Realise, после чего стало запускаться с параметрами wscanf(L"%s", l.c_str()), wprintf(L"%s", l.c_str()) если это строки и wcout<<L"Привет!!!" если это текст
0
|
|
|
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
||
| 28.08.2022, 21:41 | ||
|
fennix,
Не выводятся wchar_t символы
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 28.08.2022, 23:33 | ||
|
Но это еще зависит от ide В MSVC 2015 неважна кодировка исходника при компиляции из студии. Что логично повесить на IDE
0
|
||
|
из племени тумба-юбма
|
|||||||||||
| 08.05.2023, 22:51 | |||||||||||
|
Мне кстати тоже, давно и с самого начала не понятно различие функций:
0
|
|||||||||||
|
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|
| 09.05.2023, 00:13 | |
|
мама Стифлера, chcp - это консольная команда, которая реализована с помощью функций SetConsoleCP и SetConsoleOutputCP.
1
|
|
| 09.05.2023, 00:13 | |
|
Помогаю со студенческими работами здесь
17
Чем отличается вызов функции setlocale(0, "") от setlocale(LC_ALL,"")? Как комбинировать setlocale(0,"") И setlocale(LC_ALL, "cp1251") ? SetConsoleCP Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|