Кирилица на конзолата, 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 <<"болгарский текст. Да ладно!" <
връщане 0;
>