-Поиск по дневнику

Поиск сообщений в simple-pc

 -Подписка по e-mail

 

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 17.04.2008
Записей:
Комментариев:
Написано: 143


В VisualStudio 2010 после компиляции неверно отображаются русские буквы

Понедельник, 20 Июня 2011 г. 13:23 + в цитатник
Mayfly все записи автора

Проблема: Во время работы программы неверно отображаются русские фразы в коде.

#include 
#include 
using namespace std;

int main() 
{
string a;
         cout << "Как Вас зовут?\n" ;
                   cin >> a;
         cout << "Привет, ";
         cout << a << "!\n";
system("pause");
return 0;
}

Причина: Изначально в редакторе кода Visual Studio (как и в других компиляторах и редакторах, работающих вOS Windows) установлена кодировка Кирилица Windows 1251,

а в консольном окне (в командной строке) используется кодировка UTF-8.

Решение № 1: Чтобы согласовать кодировки, необходимо сохранять файлы не в Windows 1251, а в DOS 866 Для этого в Visual Studio 2008 в меню ФАЙЛ -  Дополнительные параметры сохранения… вместо Кирилица (Windows) – кодовая страница 1251  выбрать Кирилица (DOS) – кодовая страница 866

Недостатки:
• Не все компиляторы позволяют сохранить файл в другой кодировке.
•  Нельзя включить украинскую раскладку
•  При закрытии решения и повторном открытии кода в редакторе Visual Studio – происходят искажения кода из-за несоответствия кодировок.

 Решение № 2: В нужном месте необходимо включать нужную кодировку отдельно для кода на русском языке и отдельно для вводимых с пользователем знаков.

#include
#include
using namespace std;

int main() {
         string a;
setlocale(LC_ALL,"Russian");      /* а лучше setlocale(0,""); для установки кода географической страны ((0,"")- текущие настройки операционной системы) */
cout << "Как Вас зовут?\n" ;

         cin >> a;
cout << "Привет, ";
setlocale(LC_ALL, ".OCP"); // или setlocale(0, ".OCP");  для возврата к начальным настройкам
cout << a<< "!" << endl ;

system("pause");
                   return 0;
}

Недостаток: Нет смысла пользоваться этим способом, если программа диалоговая, т.е. перемежевывается ввод с консоли и вывод из кода русского текста. В таком случае лучше Решение № 3

Решение № 3 Вначале включаем нужные кодировки для потока ввода и вывода с консоли.(но перед этим устанавливаем в консольном окне шрифт luchida cjnsole)

#include 
#include 
#include <windows.h>
using namespace std;

int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
         string a;
         cout << "Как Вас зовут?\n" ;
         cin >> a;
cout << "Привет, ";
cout << a <<<"!\n"
system("pause");
                   return 0;
}

ПРИМЕЧАНИЕ: Нельзя одновременно применять несколько способов, поскольку отображение русского текста будет снова искажено.

Воспользовался вторым способом (третий не сработал - получилась ошибка) - получилось.

Источник: http://lvvas.co.cc/index.php?option=com_content&view=article&id=115&Itemid=101

Рубрики:  программирование
Метки:  

Mayfly   обратиться по имени Понедельник, 20 Июня 2011 г. 13:39 (ссылка)
Насчет:
ФАЙЛ - Дополнительные параметры сохранения… вместо Кирилица (Windows) – кодовая страница 1251 выбрать Кирилица (DOS) – кодовая страница 866

Если у вас английская версия, аналог:
File - Advanced Save Options...
вместо
Cyrillic (Windows) - Codepage 1251
выбрать
Cyrillic (DOS) - Codepage 866
Ответить С цитатой В цитатник
 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку