Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
#1

Почему программы не видят кодировку cp866? - C++

09.05.2011, 23:26. Просмотров 2185. Ответов 5
Метки нет (Все метки)

Началось с того, что я попал на ирц чат к разрабам CodeLite с просьбой разобраться с русскими буквами в консоли. Там сказали, что программы использую только те кодировки, которые есть в системе. Тогда я сравнил списки кодировок в CodeLite и Code::Blocks, они оказались совершенно одинаковые. Стал копать WinXP.
Сначала проверил файл C:\WINDOWS\system32\c_866.nls, есть такой, и куча других.
Потом полез в панель управления> язык и рег. стандарты> дополнительно> кодовые страницы таблиц преобразования. Там интересуют 1251, 20866(рус кои8), 65001 (UTF8), 866. Вроде как они не просто есть и выделены, но и отображаются серым цветом (нельзя выключить галочку). Получается что кодировка есть, она включена, но программы её не видят.

Просьба к профессионалам: Не могли бы вы посмотреть исходные коды вышеперечисленных программ и проверить, почему они не видят cp866?

Добавлено через 12 часов 40 минут
.. а потом разрабы сказали что коделайт использует фунуции wxFontMapper::GetSupportedEncodingsCount и wxFontMapper::GetEncoding. Кодеблокс кстати тоже. Поэтому у них абсолютно одинаковые списки.
http://docs.wxwidgets.org/2.8/wx_wxfontmapper.html - тут про эти функции, но для меня ничего не понятно. Получается что нужно недоработку искать в wx а не в программах.
Тогда нужно попробовать написать код, который просто выведет все доступные кодировки. Поможете?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 23:26     Почему программы не видят кодировку cp866?
Посмотрите здесь:

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

Как узнать кодировку вывода в консоль во время выполнения программы? - C++
Привет всем! Я новичок, и возникла идея написать консольное приложение для Windows которое принимает на ввод русские символы и также...

Из UTF-8 коды символов CP866 - C++
Подскажите плиз. Есть строка в UTF-8, из нее необходимо получить char состоящий из кодов этих символов в CP866 Мысли такие, с помощью...

Прога для вывода кодовой таблицы cp866 - C++
#include <conio.h> #include <iostream.h> int main() { int i; cout<<"Code table(cp866):"<<endl; for(i=0;i<=255;i++) ...

Считывание части строк из файла в кодировке CP866 - C++
Доброго времени суток! Пытаюсь считать из текстового файла в кодировке CP866 текст длинной например в 64 символа с начала каждой строки,...

почему вылетает из программы? - C++
почему вылетает из программы во время рассчета длины массива? всю голову слома, не могу найти ошибку помогите пожалуйста //файл...

Почему не работает этот кусок программы? - C++
Дана цепочка 00000101001010 она записана в массив, каждая цифра отдельный элемент. нужно инвертировать, не используя специальных...

Неожиданное поведение программы: почему не работает цикл do while? - C++
Здравствуйте,подскажите,пожалуйста,почему не работает цикл ... Условие корявое? //Напишите программу, которая по начальной сумме денег...

Неожиданное поведение программы: почему не работает цикл while? - C++
Проблема: Цикл While при != является бесконечным ,а при == не выполняется ни разу Ожидаемое поведение: После входа в цикл N должно быть...

Что выведет следующий фрагмент программы и почему? - C++
double a = 0.3, b = 5.1; if (5.4 == a + b) cout « "равно"; else cout « "не равно"; При компиляции выводит не равно,...

Почему результатом программы являются неразборчивые символы? - C++
программа заменить буквы а на 0 #include <stdio.h> #include <locale> #define N 4096 int main(void) { ...

Почему несколько запущенных копий программы не влияют на скорость? - C++
Запускаю программу на выполнение, выдает скорость работы. Запускаю 5 экземпляров скорость не меняется. Почему так происходит, хотя вроде...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
10.05.2011, 02:43     Почему программы не видят кодировку cp866? #2
А для чего нужна эта кодировка?
Для русских букв в консоли можно использовать эту функцию:
CharToOemBuff()
У меня кстати была похожая проблема, в кодировке 866 шрифт кривой был, проблема решилась сменой шрифта
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
10.05.2011, 21:41  [ТС]     Почему программы не видят кодировку cp866? #3
Такс.. результ:

Добавлено через 16 минут
Такс.. результ:
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    system ("chcp 1251"); // переходим на кодировку 1251
    printf("Всем привет!\n");
    return 0;
}
В обычном режиме (с пиксельным шрифтом) выходит чертовщина. В заголовке консоли ПКМ, свойства, шрифт, Lucida Console, OK, сохранить свойства для других окон с тем же именем. Вот результат:
http://s1.ipicture.ru/uploads/20110510/uVQVGCKV.png
Единственный недостаток - в самой первой строчке будет сообщение о том, что изменена кодировка, но это не критично.
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
10.05.2011, 22:37     Почему программы не видят кодировку cp866? #4
мой пост по всей видимости проигнорирован)
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
10.05.2011, 23:07  [ТС]     Почему программы не видят кодировку cp866? #5
Как раз из поста узнал, что шрифт можно сменить.

Но всё таки тема не просто добиться рус букв, но разобраться, почему проги не видят 866?
1. wxFontMapper::GetAllEncodingNames - возвращает все названия данной кодировки.
2. ..GetSupportedEncodingsCount вместе с ..GetEncoding могут использоваться для получения всех поддерживаемых кодировок.
Вроде так понял. Но хочется разобраться, видят ли эти функции cp866?
(может тему в wx нужно перенести?)
BadBaddak
87 / 14 / 3
Регистрация: 09.06.2010
Сообщений: 100
17.07.2012, 23:12  [ТС]     Почему программы не видят кодировку cp866? #6
Исправлено. Кодировка замечательно работает. Для консоли выбираем cp866, для работы с текст файлами выбираем cp1251, а то неразбериха будет.
Почему программы не видят кодировку cp866?
Yandex
Объявления
17.07.2012, 23:12     Почему программы не видят кодировку cp866?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru