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

Какой самый универсальный способ считать UTF-8 текст на кириллице из файла? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка при запуска любого из проектов примеров directx sdk http://www.cyberforum.ru/cpp-beginners/thread948110.html
Вот собственно и ошибка LINK : fatal error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден
C++ матрица яркости с помощью каких функций, методов можно получить значение яркости пикселя или может лучше матрицу яркости пикселей изображения на C++ для черно-белого и цветного изображения? из цветного можно преобразовать RGB Y = 0.299*R+0.587*G+0.114*B но как получить параметры RGB для пикселя не знаю... getpixel вроде долго работает...его не рекомендуют использовать....может с помощью OpenCV или... http://www.cyberforum.ru/cpp-beginners/thread948099.html
C++ Запись в фаил бОльшего числа цифр
Подскажите пожалуйста, что нужно использовать для того, чтобы записать в фаил число с большим количеством значимых цифр. ... fstream fs; if (!fs.is_open()) { fs.open("Efemeride.txt",ios::out); } ... double x = vec.getItem(0,0); ...
C++ Работа с двумерным массивом - разобрать строку кода
Изучаю С++ по книге Шилдт Г.(базовый курс 3-е издание). В теме двумерных массивов столкнулся со строкой, над которой сколько бы не ломал голову, не смог найти для себя её обьяснения.Помогите пожалуйста растолковать строку обведённую красной линией, почему именно такая формула использована в данной ситуации. Тут двумерному массиву присваиваются последовательные числа от 1 до 12.
C++ Работа с вектором из класса http://www.cyberforum.ru/cpp-beginners/thread948028.html
Доброго времени суток ! Не до конца понимаю "Как это работает"© Есть вектор указателей, объявленный в main() vector<Employee*> emp; который там же и наполняется. Необходимо создать класс для работы с ним. Совсем не ясно, как создать конструктор, принимающий указатель на этот вектор. И непонятно, как к нему через методы этого же класса обращаться. Например, необходимо сохранить инфу из...
C++ Как убрать указатели на пробелы и табы Помогите пожалуйста... У Меня следующая проблема: http://i60.***********/thumb/2013/0903/54/e1ea807dc1af483a58b8a883f6cac154.jpeg Как Мне убрать то, что выделено в скриншоте(т.е. указатели на то, что "там стоит пробел", там "таб"...)? Пробовал уже сделать полный сброс настроек - не помогло... подробнее

Показать сообщение отдельно
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 03:27
Нужно только учитывать, что некоторые программы (в частности блокнот) вставляют в начало файла маркер кодировки BOM (для UTF-8 три байта). Поэтому сначала нужно проверить, имеет ли файл этот маркер, и если имеет, то исключить первые три байта из записи в буфер.
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
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
    //setlocale(0, ".1251"); //включили кодировку.
    SetConsoleCP (1251); 
    SetConsoleOutputCP (1251); // или так.
    
    char buff[5000];
    wchar_t wbuff[5000];
    
    ifstream f("111.txt", ios::binary);
    if (!f) cout << "Error!" << endl;
    else
    {
        f.get(buff, 4); // считали первые три байта
        
        if ((unsigned char)buff[0] == 0xEF && (unsigned char)buff[1] == 0xBB && (unsigned char)buff[2] == 0xBF); // если BOM есть, то читаем в буфер c позции за BOM
        else  f.seekg(0); // если BOM нет, то курсор в начало файла
        
        int i = 0;
        while (f.get(buff[i])) ++i;
        f.close();
        
        MultiByteToWideChar(CP_UTF8, 0, buff, 5000, wbuff, 5000); //из буфера char в буфер wchar_t .
        setlocale(0, "rus_rus.866"); //включаем другую кодировку.
        wcout << wbuff << endl; // выводим содержимое буфера wchar_t
    
        setlocale(0, ".1251"); // вернули кодировку.
    }
    cout << endl;
    system("pause");
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru