Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 29.01.2011
Сообщений: 9

fstream работа с utf-8 файлами

30.01.2011, 01:42. Показов 3918. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Открывается файл в кодировке utf-8:

C++
1
2
3
4
fstream fin;
fin.open(fOpenDlg.GetPathName(),ios::in);
char buffer[5000];
fin.read(buffer,5000);
После чего в буфере все символы отображаются правильно, кроме русских букв.
На месте русских символов в буфере содержится следующее:

[161] -47 'С' char
[168] -114 'Ћ' char
[286] -48 'Р' char
[304] -75 'µ' char
[338] -127 'Ѓ' char

Смена локали не помогает. CharToOem/OemToChar тоже. Как правильно читать такой файл?

Добавлено через 10 часов 34 минуты
Вот, код выглядит неуклюже, зато решение:

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
char buffer[5000];
 char buffer2[5000];
 fin.read(buffer,5000);  //Читаем юникод строку с ошибками в русских буквах
 std::wstring outtext = from_utf8((LPCSTR)buffer,5000);  //получим нормальную юникод строку в wstring
 
 char buffer3[5000];
 for(int i=0;i<outtext.size();i++)
 {
    wctomb(buffer3,outtext[i]);  //Конвертирует символ из wchar_t в char
    buffer2[i]=buffer3[0];
 }
 
////Функция
std::wstring from_utf8(LPCSTR buffer, int len)
{   
        int nChars = ::MultiByteToWideChar(
                CP_UTF8,
                0,
                buffer,
                len,
                NULL,
                0);
        if (nChars == 0) return L"";
 
        wstring newbuffer;
        newbuffer.resize(nChars) ;
 
        ::MultiByteToWideChar(
                CP_UTF8,
                0,
                buffer,
                len,
                const_cast< wchar_t* >(newbuffer.c_str()),
                nChars); 
        return newbuffer;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2011, 01:42
Ответы с готовыми решениями:

Работа с файлами в кодировке UTF-16 LE (1200)
Доброе время суток! У меня возникла проблема при обработке файлов в кодировке UTF-16 LE (1200): нужно заменить в них одну строчку....

fstream работа с файлами
Помогите написать прогу или хотя бы алгоритм размещения текста в несколько столбцов! У меня идей вообще никаких нету! В работе с файлами...

Работа с файлами fstream
есть дат файл концу этого файла надо добавить целое число: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; ...

1
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
30.01.2011, 01:58
Wins_Vega, а с ios::binary?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2011, 01:58
Помогаю со студенческими работами здесь

Работа с файлами fstream,iostream
Работа с файлами Всё очень просто надо создать программу одна создаёт файл вторая читает на С++ Builder. Так вот задача такова что...

Аналоги методов работы с файлами из C в <fstream>C++
Какие аналоги имеют f-ы из C(fread,fseek,ftell и т.д.) в библиотеке fstream в C++? Я знаю, что все f-ы работают в C++, но всё же моя цель -...

При работе с файлами и потоком fstream builder не хочет компилировать код
При работе с файлами (код содержит запись и считывание с файла ofstream\ifstream) builder выдает ошибку типа: E2075 Incorrect...

Смесь *.с и *.сс в одном проекте - Написать модуль на C++ для работы с файлами при помощи <fstream>
Здравствуйте! У меня вся многомодульная программа написана на Си. Мне нужно написать модуль на С++ для работы с файлами при помощи...

getBytes('UTF-16') даёт UTF-16LE или UTF-16BE?
Добрый день! Делаю J2ME-клиента к некому серверу, исходников которого у меня нет, но есть работающий клиент на C#. Выяснилось, что C#...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru