Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Как прочитать текстовый файл в 10 байт и вывести ShowMessage ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1755
Добрый день.
Хочу прочесть текстовый файл.
Если текстовый файл сохранён в UniCode, то функция TFile.ReadAllText возвращает ерунду.

Есть ли в RadStudio 10.2 функция, которая читает текстовые файлы правильно ?
Не перекладывая на разработчика определение кодировки текстового файла(т.е. работает как NotePad.exe)
3 окт 18, 10:09    [21693733]     Ответить | Цитировать Сообщить модератору
 Re: Как прочитать текстовый файл в 10 байт и вывести ShowMessage ?  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24330
Valery_B
т.е. работает как NotePad.exe

Так он определяет.
3 окт 18, 10:25    [21693753]     Ответить | Цитировать Сообщить модератору
 Re: Как прочитать текстовый файл в 10 байт и вывести ShowMessage ?  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6060
Valery_B,

TStringList.LoadFromFile(FileName, Encoding)

Определить кодовую страницу можно примерно так:

function DetectCodePage(Buffer: PAnsiChar;  BufSize: integer): cardinal;
var i,j:integer;
    AMax:integer;
    S:AnsiString;
begin
  if IsTextUnicode(Buffer,BufSize,nil) then Result:=CP_UNICODE
  else begin
         if (Buffer<>nil) then S:=AnsiString(Buffer)
         else S:='';
         if (S<>'') and (Copy(S,1,3)=BOM_UTF8_STR) then Result:=CP_UTF8
         else
         if (S<>'') and (Copy(S,1,3)=BOM_UTF7_STR) then Result:=CP_UTF7  
         else
         if (S<>'') and ((Copy(S,1,2)=BOM_LSB_FIRST_STR) or
                         (Copy(S,1,2)=BOM_MSB_FIRST_STR)) then
             begin
               if (Copy(S,1,2)=BOM_LSB_FIRST_STR) then Result:=CP_UTF16BE
               else Result:=CP_UNICODE;
             end
         else
            begin
               // а вот тут уже твое личное творчество, как отличить KOI8 от ANSI1251 ;)
            end;
end;
3 окт 18, 10:29    [21693756]     Ответить | Цитировать Сообщить модератору
 Re: Как прочитать текстовый файл в 10 байт и вывести ShowMessage ?  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1755
DarkMaster,

Да, так можно. Я в примерно так же и сделал +-.

Но в данном случае - это ты определяешь кодировку.
Есть ли функция, которая это делает за разработчика ?
3 окт 18, 10:46    [21693771]     Ответить | Цитировать Сообщить модератору
 Re: Как прочитать текстовый файл в 10 байт и вывести ShowMessage ?  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6060
Valery_B,

Насколько я знаю - нет. Я определяю эвристикой - для моих задач - хватает. 100% угадывания, что это за кодировка ты все равно не добьешься - может быть бинарник, может быть "поломанный" юникод, может быть экзотика в виде древнего KOI-7 или какого-то арабского или китайского диалекта.
3 окт 18, 10:56    [21693784]     Ответить | Цитировать Сообщить модератору
 Re: Как прочитать текстовый файл в 10 байт и вывести ShowMessage ?  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 24330
Valery_B
Есть ли функция, которая это делает за разработчика ?

Все функции/процедуры делают что-то за разработчика.
Даже та, что DarkMaster привел для примера.
3 окт 18, 11:00    [21693792]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить