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

Кодировки. Как сменить? Какая по умолчанию? Какую использовать? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.68
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 16:57     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #1
1) Какая кодировка стоит по умолчанию в C++ проектах visual studio 10?
2) Как эту кодировку сменить?
3) Как сделать возможным использование русского и других языков в программе

4) При получении пути к программе функцией GetModuleFileName и последующем выводе этого пути в консоль функцией cout, названия папок на русском языке выводятся непонятными символами. В самой переменной путь храниться в нормальном виде (Пригоден ли он для подключения dll по этому пути)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 17:04     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #2
Цитата Сообщение от Flaker Посмотреть сообщение
3) Как сделать возможным использование русского
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console

Добавлено через 44 секунды
Цитата Сообщение от Flaker Посмотреть сообщение
1) Какая кодировка стоит по умолчанию в C++ проектах visual studio 10?
1251, в консоли - 866.
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 18:54  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #3
C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Не работает. С этим даже строка "Для продолжения нажмите любую клавишу" отображается криво.

1251, в консоли - 866.
Ведь в web специально ставят UTF-8, а не 1251, для мультиязычности? Почему же тут 1251?

Пишут, что предпочтительнее Unicode в проектах использовать. Как на него переключиться?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 18:57     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #4
Это сделали?
В свойствах консоли выбрать шрифт: Lucida Console
Добавлено через 1 минуту
Unicode в кодировках не поможет.
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 19:15  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #5
Сделал.

А что поможет?

С этим может и не поможет, но Unicode в любом случае выгоднее использовать. Как на него проект переключить то?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 19:17     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #6
Если win 7, то шрифт выбирать в настройках консоли по умолчанию.

Добавлено через 1 минуту
А что поможет?
А проверить?
Как на него проект переключить то?
В свойствах проекта: Общие - Набор символов.
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 21:14  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #7
В свойствах проекта: Общие - Набор символов.
Character Set у меня по умолчанию "Use Unicode Character Set"


В настройках шрифта в консоли по умолчанию "Consolas"
Миниатюры
Кодировки. Как сменить? Какая по умолчанию? Какую использовать?  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 21:32     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #8
И что? Нет вывода\ввода по русски? Код покажите и скрин консоли с неправильным выводом.
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 22:11  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #9
Фраза "Для продолжения нажмите любую клавишу", отлично показывается в консоли на русском языке, если не писать SetConsoleCP и SetConsoleOutputCP.

Вот текущий код:
C++
1
2
3
4
5
6
7
8
9
10
11
SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char abs_path[MAX_PATH];
    int pathst = GetModuleFileName(NULL, (LPWSTR)abs_path, MAX_PATH);
    for (int i = 0; i <= MAX_PATH; i++)
        cout << abs_path[i];
    cout << endl << endl;
 
    cout << "Это просто пробная строка на русском языке" << endl;
    system("pause");
Миниатюры
Кодировки. Как сменить? Какая по умолчанию? Какую использовать?  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 22:22     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #10
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    cout << "Это просто пробная строка на русском языке" << endl;
    
    system("pause");
}
Первый скрин - это когда в свойстах консоли выбран шрифт Lucida Console. Второй - когда точечные шрифты. Похож на ваш, правда? Делайте выводы...
Миниатюры
Кодировки. Как сменить? Какая по умолчанию? Какую использовать?   Кодировки. Как сменить? Какая по умолчанию? Какую использовать?  
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 22:33  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #11
У меня главная функция объявляется по другому:
C++
1
int _tmain(int argc, _TCHAR* argv[])
Она была написана автоматически самой студией... Может я проект не правильно создаю?

И еще инклуды:
C++
1
2
#include "stdafx.h"
#include <iostream>
В целом конечно все похоже.

Значит не только в SetConsoleCP у меня проблемы могут быть...

Стоп, а где вообще меняется шрифт для консоли... Может я не там меняю...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 22:47     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #12
Цитата Сообщение от Flaker Посмотреть сообщение
У меня главная функция объявляется по другому:
Это не влияет.
Цитата Сообщение от Flaker Посмотреть сообщение
Может я проект не правильно создаю?
Это тоже не влияет.
Цитата Сообщение от Flaker Посмотреть сообщение
Стоп, а где вообще меняется шрифт для консоли... Может я не там меняю...
В запущенной консоли, правой кнопкой по зоголовку окна, в свойствах по умалчанию. Шрифт: Lucida Console. Бывало, что с ним не получалось, тогда Consolas.

Добавлено через 1 минуту
ОС 7-ка?
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 22:51  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #13
Почему у меня строка "Для продолжения нажмите любую клавишу" у меня и шрифтом по дефолту показана нормально?

Если win 7, то шрифт выбирать в настройках консоли по умолчанию.
И да, у меня win 7

Изменил шрифт в открытой консоли ( думал надо в проекте ) и пробная строка отобразилась нормально, но путь почему то перестал отображаться даже английскими буквами...
Миниатюры
Кодировки. Как сменить? Какая по умолчанию? Какую использовать?  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 22:53     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #14
Цитата Сообщение от Flaker Посмотреть сообщение
Почему у меня строка "Для продолжения нажмите любую клавишу" у меня и шрифтом по дефолту показана нормально?
Потому что её система выводит.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 22:56     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #15
Отключить в проекте юникод:
C++
1
2
3
4
5
6
7
8
9
10
11
12
SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char abs_path[MAX_PATH];
    int pathst = GetModuleFileName(NULL, (LPSTR)abs_path, MAX_PATH);
    for (int i = 0; i <= MAX_PATH; i++)
        cout << abs_path[i];
    cout << endl << endl;
 
    cout << "Это просто пробная строка на русском языке" << endl;
    
    system("pause");
Миниатюры
Кодировки. Как сменить? Какая по умолчанию? Какую использовать?  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 22:58     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #16
Или не отключать, но тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    wchar_t abs_path[MAX_PATH];
    int pathst = GetModuleFileName(NULL, (LPWSTR)abs_path, MAX_PATH);
    for (int i = 0; i <= MAX_PATH; i++)
        wcout << abs_path[i];
    cout << endl << endl;
 
    cout << "Это просто пробная строка на русском языке" << endl;
    
    system("pause");
Миниатюры
Кодировки. Как сменить? Какая по умолчанию? Какую использовать?  
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 22:59  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #17
Отключить в проекте юникод:
Это в Character Set?

Что выбрать из:
1) Non-set
2) Unicode
3) Multi-Byte
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 23:03     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #18
Цитата Сообщение от Flaker Посмотреть сообщение
Это в Character Set?
1) Non-set
Цитата Сообщение от alsav22 Посмотреть сообщение
Или не отключать, но тогда так:
16 пост.
Flaker
1 / 1 / 0
Регистрация: 07.07.2012
Сообщений: 90
28.08.2013, 23:07  [ТС]     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #19
16 пост.
Попробовал, но теперь в консоль печатает только С:\Users\

( Код прежний )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 23:12     Кодировки. Как сменить? Какая по умолчанию? Какую использовать?
Еще ссылки по теме:

C++ Какую функцию STL использовать для работы с множеством ?
Какую ide лучше использовать для c++ C++
C++ Какую запись переменных в цикле for лучше использовать?

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 23:12     Кодировки. Как сменить? Какая по умолчанию? Какую использовать? #20
А лучше так:
C++
1
2
3
4
5
6
7
8
9
10
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    wchar_t abs_path[MAX_PATH];
    int pathst = GetModuleFileName(NULL, (LPWSTR)abs_path, MAX_PATH);
    wcout << abs_path << endl;
    
    cout << "Это просто пробная строка на русском языке" << endl;
    
    system("pause");
Добавлено через 1 минуту
Цитата Сообщение от Flaker Посмотреть сообщение
Попробовал, но теперь в консоль печатает только С:\Users\
А как же мой скрин?

Добавлено через 1 минуту
Цитата Сообщение от Flaker Посмотреть сообщение
Попробовал, но теперь в консоль печатает только С:\Users\
После Users\ , что должно быть?
Yandex
Объявления
28.08.2013, 23:12     Кодировки. Как сменить? Какая по умолчанию? Какую использовать?
Ответ Создать тему
Опции темы

Текущее время: 16:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru