今天在网上看到一位老兄写的判断记事本保存的文本的四种格式的判断,觉得非常不错。
Notepad
(记事本)只支持四种格式:
ANSI/Unicode/Unicode big endian/UFT-8
,在
Delphi
中如何判断与读取这些不同格式的文本呢?
首先,不同编码的文本,是根据文本的前两个字节来定义其编码格式的。
定义如下:
ANSI
:
无格式定义;
Unicode
:
前 两个字节为
FFFE
;
Unicode big endian
:
前两字节为
FEFF
;
UTF-8
:
前两字节为
EFBB
;
所以读写代码如下:
经过验证ANSI和UTF-8,这个函数完全正确判定文本的格式,但是在读UTF-8文件的时候,会出现汉字乱码。事实上,我们可以利用前两个字节 来判断文本类型,而通过Utf8Decode来转换。
把上面的函数简化成一个判定格式的函数,如下,为了简单,返回值使用了String: