Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663

TMemIniFile и его кодировка при перезаписи

07.05.2017, 09:55. Показов 1947. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите решить проблему! Есть файл
mt_1000 = new TMemIniFile(MemoName,TEncoding::Unicode) ;
и переменная UnicodeString Key3_2
На компе язык программ, не поддерживающих юникод - русский
В переменной содержится строка на иврите
При добавлении в mt_1000
mt_1000->WriteString("Panel Only "+NumPanel, "Key3_2", Key3_2);
в Key3_2 все как надо, но в самом файле где иврит - знаки вопросов.
Ясно, что файл перезаписывается не в кодировке Unicode
Есть возможность исправить эту ситуацию?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2017, 09:55
Ответы с готовыми решениями:

Запись текста в файл без его перезаписи
Очень нужна ваша помощь, скажите пожалуйста, как сделать чтобы после каждого нового текста, который я хочу записать в file.txt он не...

Добавление записи в XML-файл без его перезаписи
Всем привет! Возникла проблема. Не могу найти как по-простому добавить запить (элемент) в файл XML без его перезаписи. Пример: Есть: ...

Замена строк в текстовом файле без его перезаписи
Товарищи, подскажите, каким образом можно менять содержимое текстового файла без его перезаписи? Задание выглядит так: требуется найти...

13
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
07.05.2017, 12:53
Очень странно:
Миниатюры
TMemIniFile и его кодировка при перезаписи  
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
07.05.2017, 12:59
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Ясно, что файл перезаписывается не в кодировке Unicode
А проверь (в том же Notepad++, например), в какой кодировке пишется файл? У меня показывает UCS-2 LE BOM
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
07.05.2017, 13:30  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
А проверь (в том же Notepad++, например), в какой кодировке пишется файл?
Тут вот я что заметил. mt_1000 у меня формируется в девяти функциях, причем в первой я его создаю
mt_1000 = new TMemIniFile(MemoName,TEncoding::Unicode) ;
дальше заполняю разные mt_1000->WriteString(.....
и только в последней функции делаю mt_1000->UpdateFile();
и удаляю его. Прикол в том, что если делать UpdateFile после каждого WriteString, все как надо пишется.
А если один раз в конце - такая вот проблема - файл переписывается не в той кодировке, что нужно. Очень странно.... Но если делать обновление файла после каждой записи - существенно увеличивается время формирования файла. Раз в 10 дольше.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
07.05.2017, 17:16
Можно тестовый проект показать, в котором проблема воспроизводится? У меня что-то не получилось. Записал значения в ini-файл в трех разных функциях, только в третьей вызвал UpdateFile() - все нормально сохранилось, в той же кодировке UCS-2 LE BOM
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
08.05.2017, 20:21  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Можно тестовый проект показать
Делал, делал - тоже не воспроизводилось. Но нашел один момент. При сохранение в новый файл(если задать новое имя) все нормально. Но если перезапись происходит в существующий, плюс у него была кодировка ANSI - только в этом случае кодировка не меняется. Следовательно почему не меняется и возможно ли что то с этим сделать?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
08.05.2017, 20:26
Пардон, а как у него может быть кодировка ANSI, если TMemIniFile создается со вторым параметром равным TEncoding::Unicode? Или это сторонний INI, не создаваемый твоим приложением? Тогда его надо переконвертировать в UTF16 перед тем, как использовать.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
08.05.2017, 20:52  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
сторонний INI
я раньше создавал эти файлы в том же приложении, но с параметром UTF8. И они остались. А как их переконвертировать? И можно это делать в любом случае....так, на всякий случай? Просто этот проект уже год работает и у всех куча этих файлов на компах со старой кодировкой...Любой может ткунуть на какойнибудь не нужный ибо новый лениво создать и может это получиться. Если локаль не совпадает с языком в файле - упс..
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.05.2017, 20:59

Не?

Или если программно то тем же TStingStream с указанием кодировки?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
08.05.2017, 22:08  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
тем же TStingStream с указанием кодировки
именно программно нужно. если можно поподробнее..я просто не знаю этого.

Добавлено через 56 минут
Пока исходя из того, что если файл перезаписывается, то он никому не нужен - в любом случае после
CurrNameMEMO = SaveDialog3->FileName;
делаю
DeleteFile(CurrNameMEMO.c_str());

но можно ли так и правильно ли это....
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
09.05.2017, 09:02
Цитата Сообщение от Sergey_03 Посмотреть сообщение
но можно ли так и правильно ли это
Ну, это смотря по обстоятельствам. Если у тебя в этих функциях создается совершенно новый файл - то можно. А если какая-то часть файла все равно остается и добавляется новая информация, но старая все еще может когда-нибудь понадобиться - то нельзя.
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
09.05.2017, 09:10  [ТС]
Вся текущая информация содержится в структурах приложения и из них формируется заново файл. Так что не только можно, но и нужно. Спасибо большое. Но хотелось бы для общего развития знать, как сделать конвертацию файла в нужную кодировку, или её поменять, если файл уже есть, но он пустой.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 12
09.05.2017, 09:49
В 2009+ конвертацию можно сделать так:
C++
1
2
3
4
5
#include <IOUtils.hpp>
// ...
 
    String u8s = TFile::ReadAllText(ExtractFilePath(ParamStr(0)) + "before.ini", TEncoding::UTF8);
    TFile::WriteAllText(ExtractFilePath(ParamStr(0)) + "after.ini", u8s, TEncoding::Unicode);
ну или в один и тот же файл, но с удалением его между этими двумя строками. В результате файл из кодировки UTF-8 BOM (мой тестовый before.ini был создан с TEncoding::UTF8) сконвертируется в UCS-2 LE BOM, и прекрасно открывается через TMemIniFile с указанием TEncoding::Unicode.

А пустой файл лучше просто удалить и перезаписать потом уже в новой кодировке.
4
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
09.05.2017, 12:22  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
В 2009+
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.05.2017, 12:22
Помогаю со студенческими работами здесь

Файлы C++. Запись в конец файла, без его перезаписи
Доброго времени суток, уважаемые форумчане! Изучаю работу с файлами в C++ с использованием fstream. Возник вопрос: как сделать так, чтобы...

В чем ошибка при перезаписи файла?
есть файл в нем несколько строк такого вида 4|Новиков|Маким|Владимирович|россия|13к35|4 мая 2013 г.|5 мая 2013 г.| Задание...

TMemIniFile переменная получает значение NULL
Здрасте, нужна ваша помощь. Возникла ошибка, которую я очень долго не могу решить. Ini файл: Описание=Действие фильма...

Некорректные изменения в ListView при перезаписи информации
Здравствуйте. Есть LabView, который заполняется с помощью этого метода: private void Reload ( ) { listView1.Size = new...

Избавление от перезаписи файла при запуске программы
Делаю программу с файлами. Задача - при первом запуске программы (как только появится форма) создается файл с логином. Как сделать так,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru