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

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

Войти
Регистрация
Восстановить пароль
 
VoltDeMar
16 / 16 / 0
Регистрация: 05.06.2012
Сообщений: 1,015
#1

Некоректное считывание кириллических символов - C++

11.07.2015, 16:18. Просмотров 230. Ответов 1
Метки нет (Все метки)

Здравствуйте.
Вот в такой функции:
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
std::vector<std::string> CreateFileList(std::string p, std::vector<std::string>& Directories)
{
    std::vector<std::string> Files(0);
    std::string variable = p +'\0'; 
    wchar_t* Buffer = new wchar_t[p.length() + 1 ];
    mbstowcs(Buffer, variable.c_str(), variable.length()); 
    cout << p.length() << endl;
    Directories.emplace_back(p); // занесение введенного пользователем пути в массив-     
    wcsncat(Buffer, L"\\*.*", wcslen(L"\\*.*"));
    WIN32_FIND_DATAW FindFileData; 
    HANDLE hf;
    wcout << Buffer << endl;
    hf = FindFirstFileW(Buffer, &FindFileData); 
    if (hf == INVALID_HANDLE_VALUE)
    {       cout << "Invalid_handle_val \n" << endl;
        cout << "What to do?" << endl;      }
    do
    {   wstring ws(FindFileData.cFileName); // переменная имени файла в двух форматах 
        std::string temp(ws.begin(), ws.end());
        if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если находим дирректорию 
        {   std::wcout << " Here is the folder: %s  \n" << FindFileData.cFileName << endl; 
            Directories.emplace_back(p +"\\" +temp); }
        else
        {   Files.emplace_back(p +"\\" + temp); }} 
    while (FindNextFile(hf, &FindFileData) != NULL); // ищем следующий файл 
    return Files;
}
При установке проекта в : Use Unicode Character Set.

Имя файла на кириллице отображается некорректно.
Почему? Что делать?
Миниатюры
Некоректное считывание кириллических символов  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2015, 16:18     Некоректное считывание кириллических символов
Посмотрите здесь:

Поддержка кириллических символов - C++
Привет! Программа выводит буквы алфавита пирамидкой. С латиницей все работает, но если поменять на кириллицу, срабатывает проверка...

Непонятка с кодами кириллических символов - C++
Писал программу для перевода символов в верхний регистр. Для латиницы она работает, но странно ведет себя с кирилицей. Собственно код: ...

Отображение кириллических символов из файла - C++
Доброго времени суток, уважаемые форумчане! У меня возник небольшой вопрос. Мне надо прочитать текст с кириллическими символами из...

Неверное отображение кириллических символов в консоли - C++
Добавление языка в программе есть, а он каракули выводит! Что я делаю не так? #include&lt;iostream&gt; #include &lt;fstream&gt; #include ...

Подсчет символов UTF-8. Считывание пробельных символов - C++
Написал программу считывания файла с кодировкой UTF-8. Но она не считывает пробельные символы. Программа получает на вход файл из...

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

Считывание символов с файла. - C++
привет. задача состоит в том, что бы заполнить файл любыми символами, а потом там найти определенное слово. например в файле написано:...

Считывание символов из строки - C++
Здравствуйте, форумчане. Можете подсказать, каким образом можно считать из RichTextBox символы до какого либо знака-разделителя, записать...

Считывание ЛЮБЫХ символов из файла - C++
Дорого времени суток! Проблема заключается в следующем: Есть криптоалгоритм который шифротекст вставляет в txt файл. После этот файл...

Считывание символов до пробела и после - C++
Здравствуйте. Считываю цифры с помощью функции gets_s(например 3 11). Подскажите как сделать,чтобы цифы до пробелы приравнялись допустим...

Последовательное считывание массива символов - C++
Я всего лишь несколько дней изучаю C++, а потому то и дело возникают разного рода трудности в понимании. Сейчас мне не ясно одно: как...

Считывание символов и цифр с клавиатуры - C++
Как сделать так, чтобы считывая строку программа заносила символы в один список, а цифры в другой. Например: ввожу в консоли 2+3-5= в...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6917 / 4110 / 939
Регистрация: 30.01.2014
Сообщений: 6,905
11.07.2015, 18:08     Некоректное считывание кириллических символов #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от VoltDeMar Посмотреть сообщение
Почему? Что делать?
Не использовать однобайтовые кодировки вообще. Использовать юникод везде. Никаких конвертаций.

Вот, причесал твой код.
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
#include <vector>
#include <string>
#include <windows.h>
#include <fcntl.h>
#include <io.h>
 
std::vector<std::wstring> CreateFileList(std::wstring const & path, std::vector<std::wstring> & Directories)
{
    std::vector<std::wstring> Files;
 
    Directories.emplace_back(path); // занесение введенного пользователем пути в массив-     
 
    std::wstring const searchMask = path + L"\\*.*";
    std::wcout << searchMask << std::endl;
    
    WIN32_FIND_DATA FindFileData;
 
    HANDLE hf = FindFirstFile(searchMask.c_str(), &FindFileData);
    if (hf != INVALID_HANDLE_VALUE)
    {
        do
        {
            if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // если находим дирректорию 
            {
                std::wcout << " Here is the folder: [" << FindFileData.cFileName << "]" << std::endl;
                Directories.emplace_back(path + L"\\" + FindFileData.cFileName);
            }
            else
            {
                std::wcout << " Here is the file: [" << FindFileData.cFileName << "]" << std::endl;
                Files.emplace_back(path + L"\\" + FindFileData.cFileName);
            }
        } 
        while (FindNextFile(hf, &FindFileData) != NULL); // ищем следующий файл 
    }
    else
    {
        std::wcout << L"Invalid_handle_val" << std::endl;
        std::wcout << L"What to do?" << std::endl;
    }
    return Files;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    _setmode(_fileno(stdin), _O_U16TEXT);
    _setmode(_fileno(stdout), _O_U16TEXT);
 
    std::wstring path;
    if (std::getline(std::wcin, path))
    {
        std::vector<std::wstring> Directories; // вектор с директориями
        std::vector<std::wstring> Files = CreateFileList(path, Directories); // вектор с файлами
    }
    return 0;
}
Yandex
Объявления
11.07.2015, 18:08     Некоректное считывание кириллических символов
Ответ Создать тему
Опции темы

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