文本文件编码转换器

来源:互联网 发布:徐宥箴 知乎 编辑:程序博客网 时间:2024/04/29 13:59

文本文件也有编码?却实如此。什么是编码呢?编码是指不同国家的语言在计算机中的一种存储和解释规范,如,我们常说的ANSI是一种存储方式,ASCII是一种解释规范。

最初,Internet上只有一种字符集——ANSIASCII字符集(American Standard Code for Information Interchange,“美国信息交换标准码),它使用7 bits来表示一个字符,总共能表示128个字符,后来IBM公司在此基础上进行了扩展,用8bit来表示一个字符,总共可以表示256个字符,充分利用了一个字节所能表达的最大信息。后来派生了,的字符集,如:UTF-8Unicode等等,正式的名称为MBCSMulti-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。

UNICODEUTF-8,由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符,标准的Unicode称为UTF-16(UTF:UCS Transformation Format )。后来为了双字节的Unicode能够在现存的处理单字节的系统上正确传输,出现了UTF-8,使用类似MBCS的方式对Unicode进行编码。(Unicode字符集有多种编码形式),例如“连通”两个字的Unicode标准编码UTF-16 (big endian)为:DE 8F 1A 90,而其UTF-8编码为:E8 BF 9E E9 80 9A,就是说,UTF-8编码中,一个字符占三个字节。

因此,为了标示每种编码格式,在文件头用特殊字节表示每种编码,当一个软件打开一个文本时,要做的第一件事是检测文件头标识,确定这个文本是使用哪种字符集的哪种编码保存的。下表为几种文本编码的文件头标识:

编码格式

文件头

ANSI

UTF-8

EF BB BF

Unicode(little endian)

FE FF

Unicode(big endian)

FF FE

 

       在实际开发应用中,我们处理文本类型的文件,如:jspaspxphpjs等等程序源文件时,要注意文件保存时的编码,如果用不同的开发工具,可能保存的格式会各不相同。如在VS2005开发环境里,当改变 aspx 文件中 head区里的

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

字符集设置(如把 gb2312 改成 utf-8),在保存时,VS2005会自作聪明的改变你的文件的编码格式。当用不能正确识别文本编码格式的其它开发工具(如firework)打开时,就会出现乱码,因为不能正确识别文本文件编码的工具在打开时仍然按 ANSI字符格式显示。这样就会导致问题的出现。

       Windows98以下的操作系统,默认是按ANSI格式处理的,其操作系统自带的记事本没有识别文本文件编码的功能,如果打开了一个Unicode编码的文本文件,将会出现乱码。而Windows2000以上的操作系统默认是按Unicode格式处理的,而且操作系统自带的记事本能够正确识别不同格式的文件文件,打开时都会显示正常。有一点要注意:在Windows2000以上的操作系统中,就算是文本文件格式是ANSI的,操作系统处理时也要先转为Unicode格式再处理。所以,建议大家在Windows2000以上的操作系统中处理文本文件时,按Unicode格式保存,这样,可节省操作系统识别及转换的时间。

       我搞了一个小工具软件,用于识别文本文件是什么编码格式的,以及可以批量转换指定目录下指定后缀文件的编码,下载地址:http://download.csdn.net/source/408426/ 内含全部源码(Delphi7)及可执行程序,欢迎大家使用。

 

 
原创粉丝点击