Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/35: Рейтинг темы: голосов - 35, средняя оценка - 4.80
CYBER+
27 / 3 / 1
Регистрация: 16.03.2016
Сообщений: 94
1

Кодировка файла UFT8 без BOM

12.08.2016, 08:54. Показов 6846. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Кодировка файла UFT8 без BOM

Delphi
1
ONELIST:= TStringList.Create;
Delphi
1
ONELIST.LoadFromFile('C:\Users\Admin\Desktop\test.txt');
При WriteLn(ONELIST.Text); выводится текст как
Delphi
1
??????????????????????????????????????????????
, как можно задать кодировку UTF8 без BOM, нужно именно без BOM. Или же, присвоить файлу кодировку, а потом вывести?
Можете помочь? Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2016, 08:54
Ответы с готовыми решениями:

Кодировка UTF-8 без BOM
В общем не совсем проблема, мелочь, НО бесячая мелочь! Adobe Dreamweaver СС ко всем созданным...

Кодировка UTF-8 без BOM
Никак не получаєтся сохранить php файл в колировке UTF-8. Тоисть если я сохраняю без BOM то...

Определить кодировку файла (UTF8 без BOM)
Мужики, всем привет! Может кто занимался подобным, подскажите, как можно определить кодировку...

Записать в начало файла сигнатуру BOM (EF BB BF) UTF-8 с BOM
Всем привет. Ребята подскажите как это можно сделать? Я пробовал и так QFile fal ("file"); ...

2
5489 / 4404 / 1077
Регистрация: 29.08.2013
Сообщений: 27,605
Записей в блоге: 3
12.08.2016, 10:09 2
Delphi
1
procedure LoadFromFile(const FileName: string; Encoding: TEncoding); overload; virtual;
0
13107 / 5888 / 1707
Регистрация: 19.09.2009
Сообщений: 8,808
12.08.2016, 12:48 3
Лучший ответ Сообщение было отмечено Легион как решение

Решение

Вариант для любой версии Delphi. Текст UTF-8 может быть с меткой BOM или без неё.
Delphi
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
//Загрузка текста в кодировке UTF-8 из файла, преобразование кодировок
//UTF-8 -> UNICODE (UTF-16LE) (-> ANSI для Delphi 2007 и ниже) и загрузка в экземпляр типа TMemo.
//В файле может присутствовать или отсутствовать метка BOM - в программе это учитывается.
procedure TForm1.Button1Click(Sender: TObject);
var
  Od : TOpenDialog;
  Fs : TFileStream;
  S  : UTF8String;  //UTF8String = AnsiString.
begin
  //Диалог выбора файла.
  Od := OpenDialog1; //OpenDialog1 уже должен быть на форме.
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(ParamStr(0));
  if not Od.Execute then
    Exit;
  if not FileExists(Od.FileName) then
  begin
    MessageBox(Handle, 'Файл с заданным именем не найден! Действие отменено.',
      'Файл не найден!', MB_OK + MB_ICONEXCLAMATION + MB_APPLMODAL);
    Exit;
  end;
 
  //Загрузка данных из файла и их обработка.
  Fs := TFileStream.Create(Od.FileName, fmOpenRead + fmShareDenyWrite);
  try
    //Проверяем наличие метки BOM. Метка BOM: #$EF#$BB#$BF. Если она присутствует,
    //то указатель потока устанавливаем непосредственно справа от неё. Тем самым
    //исключаем метку из дальнейшей загрузки. В противном случае, если метка BOM
    //отсутствует, то возвращаем указатель потока на начало файла.
    SetString(S, PChar(#0#0#0), 3); //Размещаем строку в динамической памяти и задаём её содержимое: #0#0#0.
    if (Fs.Read(S[1], 3) < 3) or (S <> #$EF#$BB#$BF) then
      Fs.Position := 0;
 
    //Загрузка данных из файла
    SetLength(S, Fs.Size - Fs.Position); //(Fs.Size - Fs.Position) - длина строки за вычетом размера метки BOM.
    Fs.Read(S[1], Fs.Size); //Здесь написано Fs.Size вместо (Fs.Size - Fs.Position) - это тоже правильно.
 
    //Преобразование UTF-8 -> UNICODE (UTF-16LE) (-> ANSI для Delphi 2007 и ниже) и запись в Memo.
    //Подходит для любых версий Delphi. В ANSI версиях Delphi при присвоении строки типа
    //WideString переменной типа String (AnsiString), автоматически выполянется преобразование UNICODE -> ANSI.
    Memo1.Text := UTF8Decode(S);
  finally
    FreeAndNil(Fs);
  end;
end;
1
12.08.2016, 12:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2016, 12:48
Помогаю со студенческими работами здесь

utf8 без BOM
кодирую в утф 8 без бом - появляются кракозябры, как нормально перекодировать? Или в бд надо...

Без BOM получается абракадабра
А у меня выходит еще и такая проблема. Создаю пробный сайт. Использую кодировку utf8. Для...

UTF-8 без BOM = Иероглифы
Доброго времени суток! Переехал на новый сервер, и почему то всё сохраненное в &quot;UTF-8 без BOM&quot;...

Из UCS-2 Little Endian в UTF-8 без BOM
Здравствуйте! Имеется файлик xml в кодировке UCS-2 Little Endian. Хочу написать обработчик на...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru