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

Определение текущей кодировки консоли - C++

Восстановить пароль Регистрация
 
k1-801
 Аватар для k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
20.11.2013, 21:47     Определение текущей кодировки консоли #1
В предыдущей теме возник отдельный вопрос, и отвечать на него никто не стал. Итак, задаю повторно: как определить текущую кодировку консоли (на "чистом" C++, независимо от ОС)? Гугление не дало никаких конкретных результатов, разве что указание что некое "LANG" работает некорректно.

Добавлено через 53 минуты
Причём, как я понимаю, определять кодировку ввода нужно только в винде, поскольку в никсах сейчас используется UTF-8 (а задача заключается в том чтобы всё что ввели привести к единому представлению, и далее в программе "кошка" введённая в винде будет той же кошкой что и "кошка" введённая в убунте, а не какой-либо другой кошкой (к тому же меньшей...), а если вводимое это не слово, а некая случайная комбинация спецсимволов, которую вводят где-то в штатах, то она станет именно этой комбинацией, а не кошкой или собакой).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 21:47     Определение текущей кодировки консоли
Посмотрите здесь:

C++ Кодировки в С++
C++ Определение кодировки текстового файла
C++ Кодировки
C++ Определение текущей директории
C++ Кодировки, языки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
20.11.2013, 22:09     Определение текущей кодировки консоли #2
Есть сишный трюк с setlocale
C++
1
2
setlocale(LC_ALL, "");
char *loc = setlocale(LC_ALL, NULL);
Первый вызов устанавливает локаль по умолчанию, второй возвращает текущую локаль в виде строки <Язык>_<Страна>.<Кодовая страница>.
Из минусов - первый вызов на некоторых компиляторах может менять кодовую страниц для консоли (Визуал студио к примеру), второй вызов может возвращать настройки для каждой категории, строка более длинная получится.

Добавлено через 1 минуту
Цитата Сообщение от k1-801 Посмотреть сообщение
Причём, как я понимаю, определять кодировку ввода нужно только в винде, поскольку в никсах сейчас используется UTF-8
Тогда виндовые GetConsoleCP()/GetConsoleOutputCP().
k1-801
 Аватар для k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
20.11.2013, 23:38  [ТС]     Определение текущей кодировки консоли #3
Цитата Сообщение от kazak Посмотреть сообщение
Тогда виндовые GetConsoleCP()/GetConsoleOutputCP().
Ну, видимо только оно и надобно. Тогда если можно сразу такой вопрос: а возможно ли взять эту самую GetConsoleCp() и сразу перевести введённое в Юникод (исходную кодировку только что получили)?

Добавлено через 38 минут
Ну, примерно вот так (написано от балды дабы пояснить суть вопроса):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
 
int main()
{
    sting in;
    getline(cin,in);
#ifdef WIN32
    convert(GetConsoleCp,in);
#endif /*WIN32*/
    /* ... */
    return 0;
}
Вопрос: что должно быть вместо convert (и как его пользовать)?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
20.11.2013, 23:41     Определение текущей кодировки консоли #4
А не проще сразу установить нужную кодовую страницу после запуска программы?
k1-801
 Аватар для k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
21.11.2013, 21:08  [ТС]     Определение текущей кодировки консоли #5
Цитата Сообщение от kazak Посмотреть сообщение
А не проще сразу установить нужную кодовую страницу после запуска программы?
Если винда сможет вывести на консоль UTF-8 (или хотя бы введённые данные дать проге в UTF-8...) буду только рад.
Хотя я в этом сильно сомневаюсь.
Вроде бы суть работы я объяснил:

1) Всё что ввели должно оказаться в UTF-8
2) Всё в этом UTF-8 обрабатывается, читается записывается в базу (обычные текстовый файл., и он в UTF-8)

И необязательно:
3) Всё что прога в UTF-8 отправила на вывод должно правильно отобразиться.

Вроде нужное для обработки UTF-8 я написал, работает везде кроме винды. И с мёртвой точки оно не двигается (-_-)
Надеюсь, кто-то таки даст ответ в этой теме.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.11.2013, 21:17     Определение текущей кодировки консоли #6
Мда, видимо простой сменной кодовой страницы не обойдешься(. Функции для конвертирования есть, но они у каждого компилятора свои.
k1-801
 Аватар для k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
21.11.2013, 23:25  [ТС]     Определение текущей кодировки консоли #7
Цитата Сообщение от kazak Посмотреть сообщение
Мда, видимо простой сменной кодовой страницы не обойдешься(. Функции для конвертирования есть, но они у каждого компилятора свои.
Соль в ом что проблемы только под виндой, а там видимо осталась только ихняя студия. Можем же мы определить что это винда (#ifdef WIN32), можем ли мы определить какой это компилятор и выдать соответственно функцию?
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
22.11.2013, 09:34     Определение текущей кодировки консоли #8
Цитата Сообщение от k1-801 Посмотреть сообщение
можем ли мы определить какой это компилятор и выдать соответственно функцию?
Определить то можно http://sourceforge.net/p/predef/wiki/Compilers/, только накладно все это получится ИМХО. Тут впору задуматься о написании своего перекодировщика или найти более-менее внятную стороннюю либу, что вроде этого
http://www.cyberforum.ru/blogs/131347/blog533.html
iconv
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 09:47     Определение текущей кодировки консоли
Еще ссылки по теме:

C++ Преобразование кодировки
Кодировки (ошибки кодировки) в логировании C++
C++ Определение нужной кодировки для символа чёрного квадрата

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

Или воспользуйтесь поиском по форуму:
reef213
2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 26
22.11.2013, 09:47     Определение текущей кодировки консоли #9
У меня такая же проблема стоит из простых способов команда для cmd chcp
>chcp //получение кодировки
>chcp 1251 //установка кодировки
Yandex
Объявления
22.11.2013, 09:47     Определение текущей кодировки консоли
Ответ Создать тему
Опции темы

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