如何读取Unicode文件(100分)

  • 主题发起人 主题发起人 lxmsuisui
  • 开始时间 开始时间
L

lxmsuisui

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个87G的文件,里面是Unicode编码的,现在要把这文件分割成几个文件,现在用普通方法读取的话,读取出来是让码,用TNT控件读又文件太大,用文件流的方法读行么,大家说,怎么用文件流的方法读呢(要一行一行读,读取后再写到别一文件中)
 
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
FromF: file;
NumRead: Integer;
Buf: array[1..512] of Byte;
str,s : string;
begin
if OpenDialog1.Execute then
begin
AssignFile(FromF, OpenDialog1.FileName);
Reset(FromF, 1);
repeat
str:= '';
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
for i := 1 to NumRead do
begin
Str := Str + InttoHex(Buf,2);
end;
if numread<>0 then
for i:=numread to 511 do
str:=str+'FF';
memo1.Lines.Add(str);
until (NumRead=0);
CloseFile(FromF);
end;
end;

buf就是每行的内容
 
不知道你问的是判断分行的问题还是大文件的问题

判断分行只要找 #00#0D#00#0A 这4个字符就可以了
 
普通读法去掉前面三个字节再读就不是乱码了
 
Unicode 编码?你首先要确定是 Unicode 的哪个编码。wr960204 讲的是 UTF-8 才有前面三字节的说法,而偏偏 UTF-8 去掉前三个字节读出的就是乱码。只有 UTF-16 才能按照 wr960204 讲的去做,但前面去掉的不是三字节,而是二字节,这二个字节,通常是 $FE $FF 或者 $FF $FE。你可以读出最前面的二个字节来看看,如果和我说的相同,就照办吧,如果不同,就继续研究吧。
 
关注~~~~~~~~~~~~~~~~~~~~~~~~
 
后退
顶部