Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку

22.11.2012, 09:06. Показов 7209. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Последнее-то что даёт? Имеем:
C++
1
printf ("sы");
на выходе- s<кракозябр> а почему? смотрим, что у нас в экзешнике, там где должно быть "sы". А там таких два байта (ну то есть кодовая таблица 1251 в миниатюре)

s->0X73 ы->0Xfb

Разбираемся, что происходит, при печати. А происходит следующее: мы говорим консоли: "консоль, напечатай два байта 0X73 и 0Xfb" После чего консоль смотрит в СВОЮ таблицу кодировки, вот она:

s->0X73 <кракозябр>->0Xfb

и печатает СООТВЕТСТВЕННО ЕЙ:
C++
1
s<кракозябр>
Чё делать? А давай подменим консольную таблицу кодировки на нужную нам, на 1251. Подменяем:
C++
1
2
 SetConsoleOutputCP(1251);
printf ("sы");
Теперь консоль при печати двух символов смотрит в ту таблицу кодировки, которую мы ей подсунули, видит:

s->0X73 ы->0Xfb

и печатает НЕСООТВЕТСТВЕННО ЕЙ:

C++
1
s<кракозябр>
Гениально. Собсно, на этом можно было бы и остановится. Корректная печать призводится только если к этим действиям добавить ещё и смену шрифта с точечного на Lucida Console. Механизм такой смены мне абсолютно непонятен, таблицу кодировки заменили чё ещё надо? Тем не менее, заменять шрифт необходимо, а почему- неясно. Спасибо, кто объяснит, зачем.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2012, 09:06
Ответы с готовыми решениями:

Сделать, чтобы в консоли отображались русские буквы, а не кракозябры
Собственно вместо русских букв выдает кракозябры. Шрифт Lucida. Как пофиксить? #include &lt;stdio.h&gt; #include &lt;iostream&gt; ...

Как создать шрифт, чтобы печатая русские буквы, отображались русскими а компьютер воспринимал бы кодировку как английских букв
Помогите создать шрифт, чтобы печатая русские буквы, отображались русскими а компьютер воспринимал бы кодировку как английских букв. Знаю,...

Как сменить кодировку, чтобы Лазарус понимал русские буквы?
Пртвет ,собственно при сохранение файла имя берётся из эдита и получаем файл с таким названием (РєСѓСЂР°) как сделать чтобы за место этой...

31
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,028
Записей в блоге: 1
22.11.2012, 09:17
Локализация консольных приложений

Добавлено через 1 минуту
P.S. Кто мне, например, как создателю шрифта MyFont мешает заменить начертание 'А' на <ересь>?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
22.11.2012, 09:27  [ТС]
Сами-то читали. прежде чем давать?
При использовании функций настройки кон-
соли русские буквы будут отображаться пра-
вильно, если для консольного окна выбран
шрифт
Lucida Console
. Для выбора шрифта
нужно щелкнуть правой кнопкой мыши по за-
головку окна, выполнить команду Свойства , а
затем на вкладке Шрифт выбрать нужный
шрифт.
и всё!
Так-то я и сам знаю, что надо шрифт изменить, а что мне непонятно, я описал в посте N 1
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,028
Записей в блоге: 1
22.11.2012, 09:41
Читайте всё, а не кусок!
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
22.11.2012, 10:06  [ТС]
Я всё прочёл РАНЬШЕ.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
24.11.2012, 12:52  [ТС]
Есть у кого-нибудь ответ на мой вопрос?
0
24.11.2012, 12:59

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку, а надо ещё и шрифт менять?
этот вопрос нужно задавать разбам винды

0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
24.11.2012, 18:30  [ТС]
Ну то есть вы согласны со мной, что применяя
C++
1
SetConsoleOutputCP(1251);
, а после чего меняя шрифт, мы совершаем два совершенно одинаковых действия? А разработчики сделали так, чтобы мы эти два одинаковых действия сделали (а не какое-нибудь одно) и именно в таком порядке и тогда шрифт поменяется, так?

Добавлено через 5 часов 17 минут
Мне на данный момент надо увидеть разницу между "поменять кодировку" "поменять шрифт". Пока же я вижу два АБСОЛЮТНО ОДИНАКОВЫХ действия (надеюсь что это не так и разница будет мне разъяснена), и тогда да, остаётся усомниться в здравомыслии разработчиков.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2012, 21:31
В Win XP, в Стандартных - Системных есть Таблица символов. Если там посмотреть шрифт Terminal (похоже, что это он используется в качестве точечного в консоли), то там кодировка отличная от кодировки Lucida Console (Windows кирилица). И если для шрифта Lucida Console можно выбирать Набор символов (Windows кирилица, DOS кирилица и т.д.), то для Terminal такого выбора нет. Специфика точечных шрифтов?
1
24.11.2012, 21:37

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
и тогда да, остаётся усомниться в здравомыслии разработчиков.
имхо - стоит усомниться в здравомыслии разработчиков уже потому что дефолтная кодировка не utf-8!

0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
24.11.2012, 22:54  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Специфика точечных шрифтов?
Да нужна мне специфика точечных шрифтов, мне нужна специфика применения точечных шрифтов. Но начнём с простого. Итак, Lucida Console

C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <windows.h>
int main () {
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 unsigned char simvol= 'Û';
 printf ("%d\n", simvol);
 printf ("%c\n", simvol);
 getchar ();
 return 0;
}
А теперь скажите мне, как консоль винда или кто ещё может найти в таблице шрифта Lucida Console на месте N 219 символ 'Ы', если его там просто-напросто нет?
А есть там вот такая чушь: Ē. Но печатается-то Ы!
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.11.2012, 23:49
Как бы есть, и как бы 219.
Миниатюры
Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку  
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2012, 00:16
Удалил.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
25.11.2012, 00:34  [ТС]
Отлично. А теперь так:
C++
1
2
3
4
5
6
7
8
#include <stdio.h>
int main () {
 unsigned char simvol= 'Û';
 printf ("%d\n", simvol);
 printf ("%c\n", simvol);
 getchar ();
 return 0;
}
Мы говорим консоли: консоль, используя шрифт Lucida Console, напечатай нам символ, который 219! И она печатает, но не 'Ы', а какую-то херь! Почему?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2012, 00:44
Как бы печатает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
 cout << (char)219 << endl;
 
 cin.get();
 return 0;
}
Миниатюры
Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку  
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
25.11.2012, 00:50  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Как бы печатает
Но мой-то код другой! Мы ей просим согласно шрифту Lucida Console Напечатать 219, а она печатать чушь, хотя должна 'Ы' Почему в моём коде не печатает?

А рабочий код я сам могу нарисовать не в этом дело сейчас.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2012, 00:59
Цитата Сообщение от kravam Посмотреть сообщение
Мы ей просим согласно шрифту Lucida Console Напечатать 219
Для какой кодовой страницы?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2012, 01:08
Вот код 219 Lucida Console для DOS кирилица.
Миниатюры
Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку  
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.11.2012, 10:11
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
cout << (char)219 << endl;
alsav22, а знаковый ли этот char?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
25.11.2012, 14:39  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Для какой кодовой страницы?
а какая по умолчанию стоит? страница 866. Вот мы её и задействуем. Вот кодик (повторяю)
C++
1
2
3
4
5
6
7
8
#include <stdio.h>
int main () {
 unsigned char simvol= 'Ы';
 printf ("%d\n", simvol);
 printf ("%c\n", simvol);
 getchar ();
 return 0;
}
Lucida Console, есть там страница 866? Есть, вот она:
Почему же она-то не используется при выводе, если указана она (по умолчанию) и шрифт этот указан? А то получается шрифт используется этот (Lucida Console), а кодировка не эта (эта- то есть по умолчанию которая, которая 866, которая и вывела бы 'Ы'), а другая?
Миниатюры
Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2012, 14:39
Помогаю со студенческими работами здесь

Что изменить, чтобы нормально выводились русские буквы?
Как изменить конкретно эту программу, чтобы русские буквы нормально выводились в файл и на экран? package coursework; import...

Почему русские мало улыбаются?
Почему русские мало улыбаются? Этот вопрос мы часто слышим от наших иностранных коллег, и это вопрос абсолютно справедливый. Русские...

Если работать через кодировку ascii то все ок, но она не воспринимает русские буквы
Написал прогу,которая кодирует и декодирует входной текст,работает она правильно за исключением одного момента: При раскодировании...

Русские буквы в консоли
всем привет! подскажите пожалуйста код для транслита, т.е. чтобы в консольке показывались русские буквы, для этого есть специальный код,...

Русские буквы в консоли
Вчера основательно начал изучать этот замечательный язык. До этого уже было знакомство с эклипсом(где-то год назад), тогда мне это все было...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка 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
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru