前言:近期由于项目组成员上传错误编码文件至相关服务器导致乱码影响到公司在线业务。然故障虽以解决 ,但与组员沟通发现组员对编码知识了解有限。特着此文,作内部培训使用.
问: 我已经在UltraEdit中保存指定了编码格式为:UTF-8,为什么上传服务器后,还会出现乱码呢?
相信不仅是我们的组员会问到这样的问题,同样也会有不少朋友会有类似的疑问:为什么保存为UTF-8编码的网页问题用IE访问时会在页首自动增加一空白行/”自动”换行呢?
上面的自动两字为什么会加上引号,因为它并非自动,而是人为.
直奔主题: UTF-8实际上包含两种格式:UTF-8 无BOM 类型 与 UTF-8 有BOM 类型
通常开发中用到的IDE编辑器,如Zend Studio , Eclipse 中设置的UTF-8编码均为UTF-8 无BOM类型.
而实际上在UltraEdit编辑器中提供了对UTF-8编码格式两种保存方式供使用者选择.如:
1.UTF-8 – 无BOM
MDB0DB
2.UTF-8(有BOM)
BLSK%9]1GZXE}N(0YS@I4@E
BOM实际上是非常有用的前缀。但是在服务器点对点沟通解析或者网页展示中某些情况下却是多余或者说是会带来“麻烦”的。例如会在页头增加如下所示的乱码字符:”“ ?”
或者是导致IE“自动”换行,影响页面布局.
那么BOM到底是什么呢?
Some applications insert a particular combination of bytes at the beginning of a file to indicate that the text contained in the file is Unicode. This combination of bytes is known as a  signature or  Byte Order Mark (BOM). Some applications - such as a text editor or a browser - will display the BOM as an extra line in the file, others will display unexpected characters, such as .
简单点说:BOM(Byte Order Mark)是用于置于文件头用于标识编码的标记.
事实上在UTF-16 UTF-32中同样分带有BOM及无BOM两种.
因此项目开发中通常推荐大家使用Eclipse ,Zend Studio类似的编辑器进行开发,可以避免混淆编码格式如到底是带BOM正确还是无BOM格式正确。
考虑到Zend Studio 7.0以后的版本菜单功能项布局与Eclipse类似,此处以Eclipse为例,演示如何对工程设置UTF-8编码: 
“Project”上右键选择属性”properties” 弹出以下对话框:
QWQIPRB9@E48@@YT{KCQO6R
在Text file encoding中选择 "UTF-8"即可.
至于编码的发展历史,如ASCII GB2312 GBK GB18030 UTF8 UTF16 UTF32  此处不作阐述,需了解者可BAIDU 或 GOOGLE。
 
Sky
QQ: 343025026