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

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

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

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

11.07.2015, 16:18. Просмотров 239. Ответов 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.

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DrOffset
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2015, 18:08
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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