• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >心得技巧 > UTF-8文件的Unicode签名BOM(Byte Order Mark)问题

UTF-8文件的Unicode签名BOM(Byte Order Mark)问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-08-06

本文主要包含UTF-8,Unicode,BOM等相关知识,佚名 希望在学习及工作中可以帮助到您


近日在调测一个UTF8编码的中文Zen Cart网站时遇到一件怪事,网页显示文字正常,用ie的察看源文件(记事本打开)却发现乱码,firefox没有这个问题。经在网上多方查证和多次测试,解决了这个问题,其实是UTF-8文件的Unicode签名BOM(Byte Order Mark)问题。

BOM(Byte Order Mark),是UTF编码方案里用于标识编码的标准标记,在UTF-16里本来是FF FE,变成UTF-8就成了EF BB BF。这个标记是可选的,因为UTF8字节没有顺序,所以它可以被用来检测一个字节流是否是UTF-8编码的。微软做这种检测,但有些软件不做这种检测,而把它当作正常字符处理。

微软在自己的UTF-8格式的文本文件之前加上了EF BB BF三个字节, windows上面的notepad等程序就是根据这三个字节来确定一个文本文件是ASCII的还是UTF-8的, 然而这个只是微软暗自作的标记, 其它平台上并没有对UTF-8文本文件做个这样的标记。

也就是说一个UTF-8文件可能有BOM,也可能没有BOM,那么怎么区分呢?三种方法。1,用UltraEdit-32打开文件,切换到十六进制编辑模式,察看文件头部是否有EF BB BF。2,用Dreamweaver打开,察看页面属性,看“包括Unicode签名BOM”前面是否有个勾。3,用Windows的记事本打开,选择 “另存为”,看文件的默认编码是UTF-8还是ANSI,如果是ANSI则不带BOM。

我找到Zen Cart的模版文件中的html_header.php,发现文件果然不带BOM,用UltraEdit-32另存为的方式加上BOM后,再上传html_header.php,一切正常。

注意用Convertz把gb2312文件转换成UTF-8文件时,默认设置是不带BOM的。不带BOM可能出现上述乱码问题,但是带 BOM,对于php的include文件要小心,会在php字节流前面多出EF BB BF,提前输出到显示器有可能会带来程序错误。一个解决方案是凡是被include的文件都保存为ANSI,主文件可以是UTF-8。要想把一个文件去掉 BOM,使用UlterEdit打开, 切换到十六进制编辑模式,把最前面三个字节(就是那该死的 EF BB BF)替换为20,保存(注意关闭保存时自动备份的功能),再切换到默认编辑模式,把最前面的三个空格去掉就可以了。

另外还学到一些编码的小知识:所谓的unicode保存的文件实际上是utf-16,只不过恰好跟unicode的码相同而已,但在概念上unicode与utf是两回事,unicode是内存编码表示方案,而utf是如何保存和传输unicode的方案。utf-16还分高位在前 (LE)和高位在后(BE)两种。官方的utf编码还有utf-32,也分LE和BE。非unicode官方的utf编码还有utf-7,主要用于邮件传输。utf-8的单字节部分是和iso-8859-1兼容的,这主要是一些旧的系统和库函数不能正确处理utf-16而被迫出来的,而且对英语字符来说,也节省保存的文件空间(以非英语字符浪费空间为代价)。在iso-8859-1的时候,utf8和iso-8859-1都是用一个字节表示的,当表示其它字符的时候,utf-8会使用两个或三个字节。

您可能想查找下面的文章:

  • 网页编码为什么不用gbk或者gb2312而用utf-8
  • UTF-8文件的Unicode签名BOM(Byte Order Mark)问题
  • 做网站用UTF-8编码还是GB2312编码?

相关文章

  • 2018-08-23APP设计中,6种常见组件的区别与用法
  • 2018-08-23这3个UI设计细节,可以让你感受到和高手的差距
  • 2018-08-23用这个设计方案,成功解决了为色盲设计的难题
  • 2017-08-06网页设计中设计出有层次感的界面的经验介绍
  • 2017-08-06关于音乐播放App(应用软件)的分析与重设计 如何设计出漂亮的音乐播放界面
  • 2018-08-23想要搞定网页首图设计,这7个技巧帮你做得更好
  • 2018-08-23进阶好文!让人舒服的的交互设计稿该有的5个特点
  • 2018-08-23可自由编辑!一份30页的坚果Pro情怀PPT模板
  • 2018-08-23高质量好文!人人都在说「产品目标」,今天带你真正了解下
  • 2018-08-23学会用标签式设计,让你的作品又快又好!

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 2018年值得设计师学习的六大视觉设计趋势
    • 9种超实用CSS技巧帮助设计师和开发者
    • 网页改版的7大要素分享 网页改版有哪7大要素
    • 表单元素垂直居中完美解决方案
    • Bootstrap3.0学习笔记之按钮与下拉菜单
    • 教程大合辑!优设训练营的150个高品质PS/AI/AE教程
    • 网页常用分享代码大全(前端必备)
    • 网站标准开发流程图
    • 我们观察到,2018年网页文本字体的设计趋势有这7种
    • IE下utf8编码页面无端端空出一行及utf8页面无法显示的解决方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有