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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
#1

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

20.11.2013, 21:47. Просмотров 656. Ответов 8
Метки нет (Все метки)

В предыдущей теме возник отдельный вопрос, и отвечать на него никто не стал. Итак, задаю повторно: как определить текущую кодировку консоли (на "чистом" C++, независимо от ОС)? Гугление не дало никаких конкретных результатов, разве что указание что некое "LANG" работает некорректно.

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

Кодировки в консоли Windows - C++
Здравствуйте. Хотелось бы узнать, почему при запуске программы в консоли Windows, система отправляет массив argv в функцию main в...

Определение кодировки текстового файла - C++
Нужно написать программу на СИ, которая определяет кодировку текстового файла. Помогите, весь инет обшарил, ничего подходящего не...

Определение текущей директории - C++
Разработать программу для вывода текущего директория на экран. Определить атрибут очередной записи (файл или директорий) и вывести...

Определение нужной кодировки для символа чёрного квадрата - C++
Добрый день, подскажите, что нужно прописать в setlocale(LC_ALL,""); чтобы в консоли отображался символ чёрного квадрата ■ , а не...

Кодировки (ошибки кодировки) в логировании - C++
Здравствуйте. Работаю с WINAPI и оттуда нормально приходят наименования на русском. Вот решил логирование организовать и на этом повалился...

Кодировки в С++ - C++
Подскажите... Пытаюсь разобраться с кодировками в С++ на простом примере...Как заставить С++ принимать русские слова и при вводе и при...

Кодировки - C++
Интересен вопрос с кодировками, хочеть до конца разобраться. Есть несколько вопросов, данные подразумевается будут храниться после...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3033 / 2354 / 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
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
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
20.11.2013, 23:41     Определение текущей кодировки консоли #4
А не проще сразу установить нужную кодовую страницу после запуска программы?
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
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.11.2013, 21:17     Определение текущей кодировки консоли #6
Мда, видимо простой сменной кодовой страницы не обойдешься(. Функции для конвертирования есть, но они у каждого компилятора свои.
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
21.11.2013, 23:25  [ТС]     Определение текущей кодировки консоли #7
Цитата Сообщение от kazak Посмотреть сообщение
Мда, видимо простой сменной кодовой страницы не обойдешься(. Функции для конвертирования есть, но они у каждого компилятора свои.
Соль в ом что проблемы только под виндой, а там видимо осталась только ихняя студия. Можем же мы определить что это винда (#ifdef WIN32), можем ли мы определить какой это компилятор и выдать соответственно функцию?
kazak
3033 / 2354 / 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++
Всем привет! Такая задача Имеем html-код Знаем кодировку (charset) Если кодировка, отличная от UTF-8 - нужно выполнить...

Преобразование кодировки - C++
Тема не создаётся Добавлено через 12 секунд Можно ли такое замутить чисто через STL без всяких сторонних утилит типа iconv ? P.S.:...

Кодировки, языки - C++
Здравствуйте. Не могу разобраться с тем как работать с файлами и строками на разных языках. Русский получилось писать с помощью локали...

Ошибка кодировки? - C++
При присваивании русского слова к переменной input типа string - ошибка Но стоит поменять на английское слово - получается все верно. ...

Нет кодировки?! - C++
в общем я немного изменил функцию со справки под свои нужды(функция была аналогом dir'a).. вот код: #include &lt;windows.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
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     Определение текущей кодировки консоли
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru