這裡指的文字是用於windows系統中的擴充套件名為.txt的檔案。
notepad(記事本)只支援四種格式:ansi/unicode/unicode big endian/uft-8,在delphi中如何判斷與讀取這些不同格式的文字呢?
首先,不同編碼的文字,是根據文字的前兩個位元組來定義其編碼格式的。定義如下:
ansi: 無格式定義;
unicode: 前兩個位元組為fffe;
unicode big endian: 前兩位元組為feff;
utf-8: 前兩位元組為efbb;
知道了各種編碼格式的區別,寫**就容易了,以下是我在乙個軟體中寫的處理**:
(注意,delphi的tmemo/trichedit只支援ansi的文字檔案,其它編碼格式的檔案需要
自行寫**轉換成gb2312或big5,方能正確顯示)
type
ttextformat=(tfansi,tfunicode,tfunicodebigendian,tfutf8);
const
textformatflag:array[tfansi…tfutf8] of word=(0000
,0000,
0000
,fffe,fef
f,
feff,
feff
,efbb);
function wordlohiexchange(w:word):word;register;
asmxchg al, ah
end;
procedure readtextfile(const filename: string;
var textformat: ttextformat; var stext:string);
varw:word;
b:byte;
begin
with tfilestream.create(filename,fmopenread or fmsharedenynone) do
tryread(w,2);
w:=wordlohiexchange(w);//因為是以word資料型別讀取,故高低位元組互換
if w = textformatflag[tfunicode] then
textformat:= tfunicode
else if w = textformatflag[tfunicodebigendian] then
textformat:= tfunicodebigendian
else if w = textformatflag[tfutf8] then
begin
read(b,1);//這裡要注意一下,uft-8必須要跳過三個位元組。
textformat:=tfutf8;
end else
begin
textformat:=tfansi;
position:=0;
end;
setlength(stext,size-position);
readbuffer(stext[1],size-position);
finally
free;
end;
end;
Delphi文字檔案讀寫
delphi文字檔案讀寫 2008 10 31 19 07 22 delphi 支援三種檔案型別 文字檔案 記錄檔案 無型別檔案。文字檔案是以行為單位進行讀 寫的。由於每一行的長度不一定相同,不能計算出給定行在檔案中的確切位置,因而只能順序地讀寫。文字檔案只能單獨為讀或寫而開啟,在乙個開啟的文字檔案...
Delphi文字檔案讀寫
delphi 支援三種檔案型別 文字檔案 記錄檔案 無型別檔案。文字檔案是以行為單位進行讀 寫的。由於每一行的長度不一定相同,不能計算出給定行在檔案中的確切位置,因而只能順序地讀寫。文字檔案只能單獨為讀或寫而開啟,在乙個開啟的文字檔案上同時進行讀 寫操作是不允許的。1.檔案變數與檔名關聯 assig...
如何判斷文字檔案的編碼格式?
這裡指的文字是用於windows系統中的擴充套件名為.txt的檔案。notepad 記事本 只支援四種格式 ansi unicode unicode big endian uft 8,在delphi中如何判斷與讀取這些不同格式的文字呢?首先,不同編碼的文字,是根據文字的前兩個位元組來定義其編碼格式的...