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

Unicode, UTF-8 и ANSI в одном консольном приложении. Можно ли "на лету" конвертировать массив строк? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Другой рандом http://www.cyberforum.ru/cpp-beginners/thread709528.html
Есть некоторое беззнаковое целое N, нужна рандомная последовательность не повторяющихся беззнаковых целых меньше N. Длина последовательности не превышает N, но может быть меньше N, функция должна гарантировать генерацию одного члена последовательности менее, чем за 50 миллисекунд при каждом вызове, включая N-ный. После каждого вызова функции её значение используется в качестве индекса массива из...
C++ Написать функцию, находящую сумму цифр целого числа Написать функцию SumDigit(N), находящую сумму цифр целого числа N (N - входной параметр). При вводе N реализовать проверку на корректность исходных данных (N > 0). http://www.cyberforum.ru/cpp-beginners/thread709484.html
Оператор цикла. Вывести таблицу степеней двойки от нулевой до десятой C++
Задание выполните, используя все три оператора цикла (т.е. вывод результатов на экран у Вас будет осуществляться трижды с коментарием о названии оператора цикла). Написать программу, которая выводит таблицу степеней двойки от нулевой до десятой.
C++ Динамическое программирование. Определить оптимальную загрузку самолетов с грузоподъёмностью от G до 1,3G
Помогите решить задачу на динамич. программирование: Самолет имеет максимальную грузоподъемность G(m). Предметы, загружаемые в самолет, имеют различные веса и стоимости: wi(m), Сi (руб.) соответственно. Определить оптимальную загрузку самолетов с грузоподъёмностью от G до 1,3G. Показать, как изменится решение, если j-х предметов нужно погрузить не меньше k. G=20 W1=0,8 C1=12 W2=3,2...
C++ Объединить массивы в один, включив второй между пятым и шестым элементами http://www.cyberforum.ru/cpp-beginners/thread709420.html
Ввести с клавиатуры два одномерных массива содержащих 10 и 5 элементов. Объединить их в один массив, включив второй между пятым и шестым элементами.На экран вывести исходные массивы сформированные в три строки. спасибо
C++ Запрет ввода символов в консоли моя консольная программа имеет очень много вводов от пользователя, через контекстное меню (нажмите 1 для того, 2 для другого) чтоб не делать и не зацикливать каждый ввод в коде, возможно ли полностью запретить ввод каких-то конкретных символов(в основном запретить все кроме цифр 0-9 и +-) чтоб консоль никак не реагировала пока не введется допустимое значение. если нет, то как более удобно... подробнее

Показать сообщение отдельно
Excogit8er
2 / 2 / 0
Регистрация: 23.10.2012
Сообщений: 66
26.11.2012, 19:34  [ТС]     Unicode, UTF-8 и ANSI в одном консольном приложении. Можно ли "на лету" конвертировать массив строк?
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
    setlocale(0, ".1251"); //включили кодировку
    //SetConsoleCP (1251); 
    //SetConsoleOutputCP (1251); // или так.
    
    char buff[500];
    wchar_t wbuff[500];
 
    ifstream f("upload.txt");
    
    f.getline(buff, 500); // в буффер char из файла UTF-8.
    
    MultiByteToWideChar(CP_UTF8, 0, buff, 500, wbuff, 500); //из буфера char в буфер wchar_t .
    wcout.imbue(locale("rus_rus.866")); //включаем другую кодировку.
    //setlocale(0, "rus_rus.866"); // или так.
    wcout << wbuff << endl; // выводим содержимое буфера wchar_t
    
    wcout.imbue(locale("rus_rus.866")); //включаем другую кодировку.
    
    system("pause");
    return 0;
}
Красиво, что сказать. Thanx! Причем все просто и ясно, кроме одного момента:

wcout.imbue(locale("rus_rus.866")); //включаем другую кодировку.

А для чего нужна это строка? Ну, т.е. понятно, что включаем другую кодировку, но почему не сразу эту:

setlocale(0, ".1251"); // вернули кодировку.

И ещё: MultiByteToWideChar работает в консольных приложениях без проблем? Я видел её упоминание уже, но думал, что это только для "оконных" вариантов.
 
Текущее время: 03:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru