Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Как прочитать файл в Unicode   Найти похожие ветки 

 
denis555   (2004-07-29 19:00) [0]

Доброго всем времени суток, есть необходимость открыть текстовый файл сохраненный в Unicode перебоволал массу способов, но русский текст так и остался в краказябликах, IE и блокнот все отображают корректно, как переконвертировать? или открыть сразу в Memo или RichEditе? заранее спасибо.


 
wnew ©   (2004-08-07 05:21) [1]


procedure TForm1.BitBtn1Click(Sender: TObject);
var F:File;
   WideZeichen: array[0..2047] of WideChar;
   FromFile: WideString;
   WCharCount: integer;
   CellsCount: integer;
   ToRichEdit: string;
   AttrUnicode: WideChar;
begin
 if OpenDialog1.Execute then
 begin
   RichEdit1.Clear;
   AssignFile(F,OpenDialog1.FileName);
   Reset(F,SizeOf(WideChar));
   FromFile := "";
   CellsCount := SizeOf(WideZeichen) div SizeOf(WideChar);
   try
     BlockRead(F,AttrUnicode,1,WCharCount);
     if AttrUnicode = #$FEFF then
     begin
       repeat
         FillChar(WideZeichen,SizeOf(WideZeichen),#0);
         BlockRead(F,WideZeichen,CellsCount,WCharCount);
         FromFile := FromFile + WideZeichen;
       until (WCharCount = 0) or (WCharCount < CellsCount);

       ToRichEdit := WideCharToString(PWideChar(FromFile));
       RichEdit1.Lines.Add(ToRichEdit);
     end;
   finally
    CloseFile(F);
   end;
 end;
                         
end;


 
wnew ©   (2004-08-07 05:31) [2]

Да, если кракозябры так и останутся, такое может быть в Windows с не русскими региональными настройками - то нужно из модуля System скопировать вот эти процедуры и функции:

function WideCharToString(Source: PWideChar): string;
begin
 WideCharToStrVar(Source, Result);
end;

function WideCharLenToString(Source: PWideChar; SourceLen: Integer): string;
begin
 WideCharLenToStrVar(Source, SourceLen, Result);
end;

procedure WideCharToStrVar(Source: PWideChar; var Dest: string);
var
 SourceLen: Integer;
begin
 SourceLen := 0;
 while Source[SourceLen] <> #0 do Inc(SourceLen);
 WideCharLenToStrVar(Source, SourceLen, Dest);
end;

procedure WideCharLenToStrVar(Source: PWideChar; SourceLen: Integer;
 var Dest: string);
var
 DestLen: Integer;
 Buffer: array[0..2047] of Char;
begin
 if SourceLen = 0 then
   Dest := ""
 else
   if SourceLen < SizeOf(Buffer) div 2 then
     SetString(Dest, Buffer, WideCharToMultiByte(1251, 0,
       Source, SourceLen, Buffer, SizeOf(Buffer), nil, nil))
   else
   begin
     DestLen := WideCharToMultiByte(1251, 0, Source, SourceLen,
       nil, 0, nil, nil);
     SetString(Dest, nil, DestLen);
     WideCharToMultiByte(1251, 0, Source, SourceLen, Pointer(Dest),
       DestLen, nil, nil);
   end;
end;


поместить их в свой модуль и первым параметром функции WideCharToMultiByte((1251, 0, Source, SourceLen, Pointer(Dest),
       DestLen, nil, nil) передать вместо ноля 1251.



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.058 c
1-1091614457
BAYES
2004-08-04 14:14
2004.08.22
Перехват нажатия системной кнопки "свернуть"


1-1091484317
denkop
2004-08-03 02:05
2004.08.22
"Правильное" завершение работы программы


11-1079638623
nester
2004-03-18 22:37
2004.08.22
Как пользоваться KOLTabControl.


9-1083196084
HardPac
2004-04-29 03:48
2004.08.22
Порка Hard-Pac


4-1089706055
Ertong
2004-07-13 12:07
2004.08.22
AllocConsole