Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: TMemIniFile кодировка  (Прочитано 31064 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Shouldercannon
Помогающий

ru
Offline Offline

« : 10-02-2021 17:38 » 

Доброго времени суток!
Стоит задача: если файл есть, то открыть и записать в текущей кодировке. Если файла нет, то создать и записать его в кодировке UTF-8
Код: (Delphi)
var
  INI: TMemIniFile;
begin
  try
    // Если кодировки не совпадает, то будет ошибка с "падением" программы
    if FileExists(sFile) then INI := TMemIniFile.Create(sFile) else INI := TMemIniFile.Create(sFile, TEncoding.UTF8);
    try
      INI.WriteString('Settings', 'Position', Position);
      INI.UpdateFile;
    except
    end;
  finally
    FreeAndNil(INI);
  end;
end;
Явно что-то делаю не так.
Записан
darkelf
Молодой специалист

ua
Offline Offline

« Ответ #1 : 11-02-2021 11:22 » 

По содержимому текстового файла не всегда можно определить кодировку (особенно, если он довольно короткий), разве-что отличить по BOM UTF-16 и UTF-16BE, ну и в некоторых странных случаях понять, по наличию BOM, что это UTF-8. Может в этом проблема? Прошу прощения, не знаток Delphi, попробуйте явно задать кодировку ASCII, ANSI или UTF-8.
Записан
Shouldercannon
Помогающий

ru
Offline Offline

« Ответ #2 : 12-02-2021 15:57 » new

Проблема была в том, что файл INI, но расширение не *.ini. Прочитать/записать можно, но кодировка не применятся.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 12-02-2021 20:58 » 

А какая взаимосвязь между расширением и кодировкой?

Я бы прочитал файл и просканировал на:
1. наличие байт > 127
2. корректность с точки зрения utf8

Положительные 1 и 2 — utf8.
Положительный 1 — локальная 8-битная кодировка (для винды то она определена).
Иначе — ascii.

Если кодировка локальная, выполнить трансляцию и записать файл.
После можно открывать файл с уверенностью, что там utf8-совместимая кодировка.

Насчет BOM: проверь существующие ini-файлы, которые ты записал в utf8. Если присутствует, вероятно при трансляции надо добавить BOM в свой файл
.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines