Delphi 判斷文字檔案的編碼格式並讀取內容

2021-10-23 03:18:38 字數 1586 閱讀 8611

這裡指的文字是用於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中如何判斷與讀取這些不同格式的文字呢?首先,不同編碼的文字,是根據文字的前兩個位元組來定義其編碼格式的...