Наша совместная команда Banwar.org

Связаться с нами

  • (097) ?601-88-87
    (067) ?493-44-27
    (096) ?830-00-01

Статьи

Чому замість російських букв в консольному додатку виводиться сміття?

  1. Автор: Олексій Кірюшкін
  2. вихід 1
  3. вихід 2
  4. вихід 3
  5. вихід 4
Автор: Олексій Кірюшкін

Версія тексту: 1.0

Отже, Ви сваялі в Visual Studio щось типу

#include "stdafx.h" int main (int argc, char * argv []) {printf ( "Привіт всім! \ n"); return 0; }

Запускаєте цей шедевр на виконання і бачите

і вірно! Текст програми Ви набирали в рідному редакторі Visual Studio, використовуючи кодову сторінку 1251, а висновок тексту в командному додатку йде з використанням кодової сторінки 866. Що ж робити з цим неподобством? Як відомо з будь-якого безвихідного становища є принаймні 3 виходу. Розглянемо їх по-порядку.

вихід 1

Набрати текст програми в редакторі будь-якого консольного файл-менеджера.

А як же підсвічування синтаксису, висновок по F1 довідки за обраною функції і інші маленькі принади, скрашують безрадісне життя простого програміста? Ні, це вихід не для нас.

вихід 2

Якщо Ви почали писати консольную програму з нуля, він може Вам підійти. Перепишемо наш маленький шедевр ось так:

#include "stdafx.h" #include "windows.h" int main (int argc, char * argv []) {char s [] = "Привіт всім!" ; CharToOem (s, s); printf ( "% s \ n", s); return 0; }

Ключове слово тут CharToOem - саме ця функція і перетворює нашу рядок в потрібну кодову сторінку. З висновком у нашої програми тепер все нормально.

Але постає наступне питання - що робити, якщо треба перекомпілювати в консольне Windows-додаток Вашу стару DOS-програму на 100000 рядків, написану на Borland C ++ 3.1, в якій така ситуація зустрічається в кожній другій рядку. Але ж доведеться ще підганяти її під MS-компілятор, та й пару шматочків коду хочеться соптімізіровать ...

Тут мабуть має сенс застосувати хід конем, в сенсі

вихід 3

Замінюємо рідну переключалка розкладки клавіатури Windows на RusLat від Сергія Бикова , А для редактора Visual Studio змінити шрифт (Tools-> Options-> Format-> Source Windows-> Font) на будь-який шрифт для ДОСовскіх віконець, наприклад Terminal . Перемикаємо клавіатуру на розкладку DOS-CP866 (є в RusLat'е і така, поряд з KOI-8 і Russian Translit) і можна працювати з текстом нашої досовської програми в редакторі Visual Studio. Російські літери в досовської кодуванні правильно читаються, тому що встановлений відповідний шрифт і їх можна редагувати, тому що для клавіатури встановлена ​​ДОСовскіх розкладка.

Потрібно мабуть згадати і ще

вихід 4

Втім, це й не вихід навіть, а так, тупичок. Працює він лише, якщо дотримані 3 умови:

  • Ваша програма буде працювати тільки під Windows NT
  • Для вікна вашої програми буде завжди встановлений шрифт Lucida Console
  • Ваша програма ніколи не буде працювати в повноекранному режимі - тільки в вікні.

Якщо всі ці 3 умови дотримані, досить вставити спочатку програми виклик функції SetConsoleOutputCP, задавши в якості параметра потрібну нам кодову сторінку:

#include "stdafx.h" #include "windows.h" int main (int argc, char * argv []) {if (! SetConsoleOutputCP (1251)) {char msg [300]; FormatMessage (FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError (), 0, msg, sizeof (msg) - 1, 0); CharToOem (msg, msg); printf ( "SetConsoleOutputCP Error:% s \ n", msg); return 1; } Printf ( "Привіт всім! \ N"); printf ( "І ще раз привіт усім! \ n"); return 0; } Будь-який з матеріалів, опублікованих на цьому сервері, не може бути відтворений в якій би то не було формі і якими б то не було засобами без письмового дозволу власників авторських прав.866. Що ж робити з цим неподобством?
А як же підсвічування синтаксису, висновок по F1 довідки за обраною функції і інші маленькі принади, скрашують безрадісне життя простого програміста?

Новости

Banwar.org
Наша совместная команда Banwar.org. Сайт казино "Пари Матч" теперь доступен для всех желающих, жаждущих волнения и азартных приключений.