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

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

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

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

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

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

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

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

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

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

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

В чём отличия кодировки ms dos от кодировки ms windows? - C++
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
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().
0
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 (и как его пользовать)?
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
20.11.2013, 23:41 #4
А не проще сразу установить нужную кодовую страницу после запуска программы?
0
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 я написал, работает везде кроме винды. И с мёртвой точки оно не двигается (-_-)
Надеюсь, кто-то таки даст ответ в этой теме.
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
21.11.2013, 21:17 #6
Мда, видимо простой сменной кодовой страницы не обойдешься(. Функции для конвертирования есть, но они у каждого компилятора свои.
0
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
21.11.2013, 23:25  [ТС] #7
Цитата Сообщение от kazak Посмотреть сообщение
Мда, видимо простой сменной кодовой страницы не обойдешься(. Функции для конвертирования есть, но они у каждого компилятора свои.
Соль в ом что проблемы только под виндой, а там видимо осталась только ихняя студия. Можем же мы определить что это винда (#ifdef WIN32), можем ли мы определить какой это компилятор и выдать соответственно функцию?
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
22.11.2013, 09:34 #8
Цитата Сообщение от k1-801 Посмотреть сообщение
можем ли мы определить какой это компилятор и выдать соответственно функцию?
Определить то можно http://sourceforge.net/p/predef/wiki/Compilers/, только накладно все это получится ИМХО. Тут впору задуматься о написании своего перекодировщика или найти более-менее внятную стороннюю либу, что вроде этого
http://www.cyberforum.ru/blogs/131347/blog533.html
iconv
0
reef213
2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 26
22.11.2013, 09:47 #9
У меня такая же проблема стоит из простых способов команда для cmd chcp
>chcp //получение кодировки
>chcp 1251 //установка кодировки
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 09:47
Привет! Вот еще темы с ответами:

Клавиши F1-F12 в консоли, и работа с мышкой в консоли - C++
Я искал на сайте, но не нашел упоминания о том как обрабатывать и или узнавать где находится курсор мышки (и еще мне надо бы узнать нажатие...

считывание с консоли ( не с клавы, а именно с консоли) - C++
нужно написать функцию которая возвращает string в котором написано 500 символов которые были выведены в консоли от начала. среда :...

Восстановление кодировки консоли - Удаление вирусов
Давно к вам обращался,не давно обноружил,что кодировки(русские символы)отображаются корокозыбрами.Знаю,что это из за Combofix.как исправить

Смена кодировки ввода в консоли - C (СИ)
SetConsoleCP(1251);//временно меняем кодировку ввода cin.getline(srcStr,255);//забираем строку в правильной кодировке ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.11.2013, 09:47
Ответ Создать тему
Опции темы

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