Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 09.06.2023
Сообщений: 4

Сложности с кодировкой UTF-8

28.05.2024, 21:56. Показов 12842. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток!

Подскажите пожалуйста как решить проблему. Есть текстовый файл (input.txt), есть таблица символов (table.txt). Программа при открытии файла input, меняет символы в нем на те, что в table.txt. Затем сохраняем файл в файл output.txt. Все бы хорошо, у меня все работает и получается как мне и нужно. Но есть одно НО: все это работает с кодировкой ANSI. А мне нужно UTF-8 со спецификацией. Я пробовал использовать wstring и прочие нюансы для Юникода... Но в выходном файле получаются совсем не те символы, что мне нужны.
Код прилагаю:

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
string GetTableStringFromFile(string filename) {
    ifstream file(filename, ios::binary); 
    string tableString;
 
    if(file.is_open()) {
        string line;
        if(getline(file, line)) { 
            tableString = line;
        } else {
            tableString = "";
        }
        file.close(); 
    } else {
        tableString = "";
    }
 
    return tableString;
}
 
int main(int argc, char* argv[])
{
    string inFileName, outFileName, tableFileName;
 
    inFileName = argv[1];
    outFileName = argv[2];
    tableFileName = argv[3];
 
    string text = "";
    string table = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя";
    string table2 = GetTableStringFromFile(tableFileName);
 
    if(table2.length() == table.length()) {
 
        ifstream fileIn(inFileName, ios::binary);
        ofstream fileOut(outFileName, ios::out | ios::binary); 
 
        if(fileOut.is_open()) {
            while(getline(fileIn, text)) { 
                for(size_t i = 0; i < text.size(); i++)
                    for(int j = 0; j < table.length(); j++)
                        if(text[i] == table[j]) text[i] = table2[j];
                fileOut << text << "\n"; 
            }
            fileIn.close();
        }
        fileOut.close(); 
    }
 
    return 0;
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.05.2024, 21:56
Ответы с готовыми решениями:

Запись файла с кодировкой UTF-8
Нужно из Edit1 считать некое число и сохранить его в файле с кодировкой UTF-8. В интернете нашел функцию WideString, но не нашел как с...

Сохранение из Memo в файл с кодировкой utf-8
Всем привет. Нужно сохранить из мемо текст с кодировкой UTF-8 без OBM. Как сделать? if(SaveHTML-&gt;Execute()) { ...

Считать текст из файла с кодировкой utf-16 LE
Возникла кое-какая проблема. У меня имеется xml файл, в кодировке UTF-16 LE с определенным содержимым. На данный момент мне нужно получить...

1
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
29.05.2024, 07:39
Цитата Сообщение от nitrogen092 Посмотреть сообщение
if(text[i] == table[j]) text[i] = table2[j];
в UTF8 символы могут занимать до 4 байт. Поэтому сравнивать их как символы нельзя. Используете другие методы сравнения такие как find, std::strncmp и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.05.2024, 07:39

Записать AnsiString в файл с кодировкой UTF-8
Добрый день. Задача записать в txt файл строку AnsiString, содержащую русские буквы. Файл должен быть в кодировке UFT-8 Пытаюсь...

Запись текста в html-файл с кодировкой UTF-8
Хочу записать текст в html-страницу, в которой кодировка utf-8. AnsiString s1=&quot;Таблица&quot;; wchar_t s2={L&quot;Web-Страница&quot;}; char...

Кодировкой (1251 и UTF-8) как перекодировать или что с ней сделать
Пишу програму на 6 Builder C++ , вытягивает HTML текст с сайта. С одним сайтом все в порядке, когда дело касается другого сайта, текст...

Чтение файла (с кракозябрами) с однобайтовой кодировкой, конвертация в UTF-8 и вывод в другой файл
Добрый день, форумчане. Может у кого есть заготовка или кто поделится советом, необходимо прочитать файл (с кракозябрами) с однобайтовой...

Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32
Собсно сабж.


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru