使用editplus等编程工具时UTF-8编码去掉BOM头方法(转载备查)

Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在这里找到一段关于BOM的说明:

在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

另外unicode网站的FAQ-BOM详细介绍了BOM。官方的自然权威,不过是英文的,看起来比较费劲。

UTF- 8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开 头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可 是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。

PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略 UTF-8编码的文件开头BOM的那三个字符。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以这三个字符将会直接输 出。如果遇到header(),session(),cookie()等问题,将会导致乱码或显示白屏等问题.

下面附上editplus去BOM头的方法

EditPlus编辑UTF-8文件时删除BOM方法

编辑器调整为UTF8编码格式后,保存的文件前面会多出一串隐藏的字符(也即是BOM),用于编辑器识别这个文件是否是以UTF8编码。一般的文本文件会忽略这一串隐藏的字符,但对于PHP等文件会解析这一串字符,这样会导致出错。

运行Editplus,点击工具,选择首选项,如下图:

选中文件,UTF-8标识选择 总是删除签名,如下图:

然后对PHP文件编辑和保存后的PHP文件就是不带BOM的了

BOM定义了JavaScript可以进行操作的浏览器的各个功能部件的接口,提供访问文档各个功能部件(如窗口本身、屏幕功能部件、浏览历史记录等)的 途径以及操作方法。遗憾的是,BOM只是JavaScript脚本实现的一部分,没有任何相关的标准,每种浏览器都有自己的BOM实现,这可以说是BOM 的软肋所在。

通常情况下浏览器特定的JavaScript扩展都被看作BOM的一部分,主要包括: 
·关闭、移动浏览器及调整浏览器窗口大小; 
·弹出新的浏览器窗口; 
·提供浏览器详细信息的定位对象; 
·提供载入到浏览器窗口的文档详细信息的定位对象; 
·提供用户屏幕分辨率详细信息的屏幕对象; 
·提供对cookie的支持; 
·加入ActiveXObject类扩展BOM,通过JavaScript实例化ActiveX对象。 
BOM有一些事实上的标准,如窗口对象、导航对象等,但每种浏览器都为这些对象定义或扩展了属性及方法。

原文地址:https://www.cnblogs.com/apolloren/p/8168798.html

时间: 2024-08-27 04:56:42

使用editplus等编程工具时UTF-8编码去掉BOM头方法(转载备查)的相关文章

ubuntu下使用codeblocks编程运行时终端不能复制粘贴的解决方法

环境: ubuntu 12.04 codeblocks 10.05 问题: 使用codeblocks编程运行时终端不能复制粘贴 解决: settings-->environment-->generalsettings-->Terminal to launch console programs: 把方框里默认的终端改成 gnome-terminal -t $TITLE -x 其实这个也就是linux的终端啦..

node读取文本文件时,去掉BOM

BOM: Byte Order MarkUTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行, BOM的移除 BOM用于标记一个文本文件使用Unicode编码,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部.在不同的Unicode编码下,BOM字符对

网页编程工具:EditPlus

EditPlus,很土很简单很强大的网页编程工具 http://www.editplus.com/download.html  下载 http://www.cnblogs.com/pingjiang/archive/2012/05/17/efficient-code-editor-editplus.html  轻量级代码编辑器Editplus Zen Coding Zen Coding是一个快速HTML/XML/XSL/CSS快速编码的编辑器插件.通过一系列的缩写和规范来快速的创建代码. htt

函数式编程工具:filter和reduce

# -*- coding: utf-8 -*- #python 27 #xiaodeng #函数式编程工具:filter和reduce #python内置函数中,map函数是用来进行函数式编程这类工具最简单的内置函数代数 #函数式编程含义: #一种编程范式,也就是如何编写程序的方法论,是一种编程思想. #无法给予准确的定义 #函数式编程的编程风格强调表达式计算,而不是执行命令. #常见函数式编程 #filter:基于某一测试函数过滤出一些元素 #reduce:对每对元素都应用函数并运行到最后结果

数值编程工具:NumPy的详细教程

翻译原文来自:http://wiki.scipy.org/Tentative_NumPy_Tutorial 目录 1.准备工作 2.基础篇 一个例子 创建数组 打印数组 基本运算 通用函数(ufunc) 索引,切片和迭代 3.形状操作 更改数组的形状 组合(stack)不同的数组 将一个数组分割(split)成几个小数组 4.复制和视图 完全不拷贝 视图(view)和浅复制 5.深复制 函数和方法(method)总览 6.进阶 广播法则(rule) 7.花哨的索引和索引技巧 通过数组索引 通过布

php常用编程工具大全整合下载

php常用编程工具大全整合下载 1.EditPlus <ignore_js_op>   EditPlus是一套功能强大,可取代记事本的文字编辑器,拥有无限制的Undo/Redo.英文拼字检查.自动换行.列数标记.搜寻取代.同时编辑多文件.全屏幕浏览功能.对于很多php程序来说,EditPlus 非常简单好用.同时EditPlus也是一款好用的HTML编辑器,除了可以颜色标记HTML Tag (同时支持C/C++.Perl.Java)外,还内建完整的HTML和CSS1指令功能,对于习惯用记事本编

Jolt Awards 2015最佳编程工具奖榜单揭晓,Cloud9 IDE众望所归!

摘要:Jolt Awards奖是计算机软件领域的一系列奖项,类似于电影领域的奥斯卡奖.Jolt评选委员们从众多优秀的编程开发工具里挑选了6款最好的产品:其中Cloud9 IDE最后获得2015 Jolt Award最佳开发工具奖. [编者按]Jolt Awards奖是计算机软件领域的一系列奖项,类似于电影领域的奥斯卡奖.每年的奖项都代表了当年的技术创新和走向.Jolt评选委员们从这些优秀的编程工具里挑选了6款最好的产品,这些产品在被评选和排名前经过了广泛的测试,最终Cloud9 IDE最终获得2

工具推荐|程序员必须知道的11款新型编程工具

对于开发人员来说,工具是至关重要的.工具可以使开发人员的日常工作更加轻松.高效,因为只要关注最重要的事情即可.对于开发人员来说,想要寻找到更好的替代工具往往比坚持使用熟悉的.过时的工具要困难得多. 在这篇文章中,我们将列出你可以在日常工作中使用的一些新的编程工具.对在线流媒体感兴趣的许多开发人员也已经开始在其开发环境中使用这些新工具,因为这些工具与其陈旧的设施相比具有明显的优势. 你可能会想,如果旧的工具可以完成工作,那么是否还有必要去寻找新的替代工具呢?可以肯定的说,技术始终在变革,它正在不断

Python学习:映射函数(map)和函数式编程工具(filter和reduce)

在序列中映射函数map map函数会对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含了所有函数调用结果的一个列表. 例1: def sum(x):     return x + 10 L1 = [1,2,3,4,5,6,7] L = map(sum, L1) #结果为[11, 12, 13, 14, 15, 16, 17] map还有更高级的使用方法,例如提供了序列作为参数,它能够并行返回分别以每个序列中的元素作为函数对应参数得到的结果的列表.如例2所示. 例2: def sum(