Кирилица на конзолата, C за хората

Мисля, че няма нужда да казвам, че има смисъл да се учи програмиране на примерите за конзола интерфейс. То не изисква специфични познания в областта на графичните библиотеки, стандартизиран за всички операционни системи, която е вградена поддръжка в стандартната библиотека на повечето езици, конзолата - идеална възможност.

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

Често има проблем с програмата за конзола (в българските програмисти) се на изхода на кирилицата. По-скоро невъзможността му.

Имайте предвид също така, че този проблем се среща само в Windows-програмисти. Име на проблема - кодиране.

Ако сте от тях "Чух нещо, но какво е то - не съм сигурен", аз силно препоръчваме да прочетете тази статия.

Не, наистина, той е силно препоръчвам.

Дори и да няма време - печат и прочетете в автобуса.

Но по-важно.

Фактът, че руската езикова версия на Microsoft Windows, както на първичния кодиране прие ANSI, който е стандартизиран едноименната комисия и за различни езици на основава на ASCII-символи в различни кодови страници. За нашата родина е cp1251. Конзолата също използва Windows, за разлика от остарялата OEM-кодиране на диалект на Microsoft - код на страницата cp866. Защо - Бог знае. Вероятно, за да можем да се насладите на програми, написани преди 20 години, с красиви прозорци и бутони DOS стил.

Поради несъответствието на кодировки (т.е. начини за тълкуване на символни кодове в своите графични изображения), които виждаме на екрана "╧OshthЄ!" Вместо "Здравей!".

Ако има нещо, което не разбирате от предходната обяснението, все още е препоръчително да прочетете статията в линка по-горе, тъй като тук - само кратко описание на проблема и историческото минало и установяването на причинно-следствени връзки - материал, толкова значимо, че тя дублира, аз не виждам смисъл.

Вместо това, бих искал да разгледа няколко начина за решаване на този проблем. По-точно, ние считаме, един метод, а останалата част ще се предоставят връзки.

Има магия функция C

Чар * setlocale (инт категория, Конст Чар * локал)

С него се създава така наречената програма локал (локал) - набор от национални параметри, включително формати в допълнение към дата, час, валута и т.н. характерни за района, кодирането характер се използва в него.
Езикова идентификатор - низ. Форматът на се определя по различни начини. Помислете за различните изпълнения по отношение на България.

1) В Win32API броя 1049. Логично е в ада.

2) В Java. NET и Windows от версия 6.0 ( «Vista») се използва стандартизиран начин за представяне на локала - низ за форматиране

Що се отнася до нас - «RU-RU».

3) На POSIX съвместими системи (UNIX, GNU / Linux) с помощта на стандартен формат

В нашия случай - «Russian_Russia.1251»

И кой каза, че ще бъде лесно?

втора функция параметър - локал идентификатор. Там можете да прехвърлите следните стойности:

1) Cut - «Рус».

2) наименованието на езика напълно - «руски».

3) кодов номер страница - "0.1251."

Забележка: Ако премине редица използван в конзолата OEM-кодиране ( "0,866"), героите в програмата ще бъдат превърнати в него, което също е решение на нашия проблем. Това може да се постигне чрез преминаване на «.OCP» линия, което означава, че OEM Код страница и да задава локал на текущата OEM кодирани операционната система.

4) ID в POSIX формат - «Russian_Russia.1251»

5) Да линията - "." Ако направим това, програмата ще създаде кодовата страница на операционната система по подразбиране, в този случай отговаря на cp1251.

Т.е. локал в най-простия случай е както следва:

използване на пространството от имена STD;

INT главната ()
<
setlocale (LC_CTYPE, "");
Cout <<"болгарский текст. Да ладно!" < cin.get ();
връщане 0;
>