`

UTF-8 编码 include 页面空格

    博客分类:
  • JSP
阅读更多

在网站页面使用utf-8 的情况下,有时候被包含(include)的页面上面显示一行空白,而用记事本打开也开不见任何东西,发生这种情况的原因是由于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。

 

解决方案是凡是被include的文件都保存为ANSI,主文件可以是UTF-8 。要想把一个文件去掉 BOM,使用UlterEdit打开, 切换到十六进制编辑模式,把最前面三个字节(就是那该死的 EF BB BF)替换为20,保存(注意关闭保存时自动备份的功能),再切换到默认编辑模式,把最前面的三个空格去掉就可以了

 

 

BOM引起的网页布局混乱

 

今天测试网站的时候,发现在本地测试着好好的页面,放到服务器上去测试的时候,首页布局却混乱不已,页面的上部比正常状态下多出一块空白,而且整个页面的布局完全是混乱的。

一开始以为是服务器上文件版比本地的文件版本旧的原因,比对了一番没找到不同的,然后想到会不会是文件编码的问题。

切换到Zend Studio,找到首页的模板文件,属性里一看,编码UTF-8 ,对的,但是下面一行字引起了我的注意,“Byte Order Mark is UTF-8 (BOM)”,于是就想是不是这个玩意引起的布局混乱。

打开EditPlus,设置文件保存选项为一直删除BOM,打开首页模板,保存,上传,测试,没有问题!

看来果然是BOM的问题了,接下来的事就比较机械了,在模板文件里看哪些是带了BOM的,直接到EditPlus里走一遭就行了。

解决了这个问题才想起来,有些模板为了转换成UTF-8 编码的,就用记事本打开文件,然后另存为UTF-8 编码了,但是记事本是会给UTF-8 编码的文件加上BOM的,因此就引起了首页布局的混乱。

嗯,问题解决,就这样。

 

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    EasyASP 2.1 UTF-8.rar

    EasyASP 2.1 UTF-8 更新日志: 新增Easp.Include方法,完美实现了ASP的动态包含,且支持ASP源码中无限级层次的。 新增Easp.GetInclude方法,用于获取ASP文件运行的结果或获取html文件等文本文件的源码。 新增...

    ascii_table-.rar_Table

    例如,当你在Java、C或C++中读取用户输入或者写入文件时,底层都是以ASCII或其扩展(如UTF-8)编码进行的。例如,以下是一个简单的C++程序,用于打印ASCII表中的字符: ```cpp #include int main() { for (int i...

    html页面使用include导入php文件后多出一空白行

    例如,从GBK编码切换到UTF-8编码时,如果UTF-8文件带有字节顺序标记(Byte Order Mark,简称BOM)。BOM是一个特殊的Unicode字符,用于标识文件的编码类型,但在某些情况下,它会被浏览器解析为一个空格或换行符,...

    Qt初学者学习文档,讲述了基础用法和常用控件

    - 对于Qt5.0以下版本,在`main.cpp`中修改编码方式为UTF-8: ```cpp #include int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8...

    demoji:替换表情符号以免炸毁 utf8 MySQL

    表情符号当尝试保存包含表情符号等的文本行时,配置了 utf-8 编码的 MySQL 会崩溃,为了解决这个问题,Demoji 从该特定异常中拯救出来,并用空格替换了罪魁祸首字符。 在 Rails 在迁移、模式等中添加对 UTF8MB4 的...

    Warning session_start

    文档提到使用UTF-8编码时需要注意去除BOM(Byte Order Mark)。有些文本编辑器(如早期版本的Notepad++)会在保存为UTF-8格式的文件时默认添加BOM标记。这同样会被视为输出内容,导致会话启动失败。确保所有的PHP...

    C++URL编码和解码

    虽然ASCII是URL编码的基础,但在国际化的背景下,URL可能包含非ASCII字符,这时需要使用更复杂的编码方式,如`percent-encoding`的变体`UTF-8 percent-encoding`。在C++中,正确处理这些字符可能需要使用`std::...

    文档格式化为指定长度(包括中文字符)mfc

    在处理中文字符时,通常会用到UTF-8编码,因为它能很好地支持多语言环境,包括中文。UTF-8编码下,一个英文字符占1个字节,而一个中文字符则可能占1至3个字节。因此,当我们提到“指定长度”时,需要考虑这个长度是...

    PHP团队 编码规范

    - **编码格式**: 源文件中的PHP代码应采用无BOM(Byte Order Mark)的UTF-8编码格式。这是为了确保代码在不同平台间的一致性和兼容性。 - **行结束符**: 使用Unix LF(Line Feed)作为行结束符。这种格式在跨平台...

    JSP语法基础.pdf

    pageEncoding="UTF-8"%> <!DOCTYPE html> <meta charset="UTF-8"> 示例页面 欢迎来到JSP示例页面! 这是一个简单的HTML段落。 ("这是动态输出的内容。"); %> ``` 在这个例子中: - `<%@ page ... %>` ...

    asn基础知识

    asn1c -fcompound-names -fwide-strings -futf8-strings -fno-include-deps -fno-enum-enumtype-prefix -fno-write-enum-type-prefix -fno-include-header-deps -fno-keep-linkinfo -fno-keep-constraints -fno-...

    EditPlus 2整理信箱的工具

    【18】支持带UTF-8标记/不带UTF-8标记的文件 每个步骤都说得很详细了,就没有必要贴图了,体积不要太大才好。 【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次...

    Editplus 3[1].0

    【18】支持带UTF-8标记/不带UTF-8标记的文件 每个步骤都说得很详细了,就没有必要贴图了,体积不要太大才好。 【1】正则表达式应用——替换指定内容到行尾 原始文本如下面两行 abc aaaaa 123 abc 444 希望每次...

    Html5+css3Web前端开发规范标准详.docx

    - 确保页面编码统一为UTF-8:`<meta charset="utf-8">`。 8. **代码格式化**: - 实现良好的缩进,保持代码整洁。 - 使用`<label>`与`for`属性关联表单元素,提供更好的可用性。 9. **图片处理**: - 图片标签...

    dz编码规范(PHP)

    - 处理多语言时,确保字符串的编码一致,使用UTF-8或其他合适的编码方案。 ##### 4.4. 命名原则 ###### 4.4.1. 变量、对象、函数名 - 使用有意义的名称,遵循驼峰式命名法或下划线分隔命名法。 - 示例: ```php...

    第11套PHP面试题1

    例如,将UTF-8编码的字符串转换为GB2312编码: ```php $str = 'Some text in UTF-8'; $converted_str = iconv('UTF-8', 'GB2312', $str); ``` 8. `explode()`函数:这个函数可以将字符串根据指定的分隔符拆分...

    ascii.rar_ASCII转换

    此外,ASCII码还扩展到了更广泛的Unicode字符集,如ISO-8859-1、Windows-1252,以及现代的UTF-8编码,它们在处理多语言文本时起着关键作用。 总的来说,ASCII码是计算机科学的基础,它提供了字符与数字之间的桥梁,...

    url decode 源码

    3. 对于非ASCII字符,通常使用UTF-8编码,然后对每个字节应用上述规则。 ### `url decode`的实现 在C++中,我们可以使用`std::stringstream`和`std::hex`来解析并解码URL编码的字符串。以下是一个简单的`url_...

    后端编码规范

    2. **编码**:统一使用UTF-8无BOM格式进行编码,确保跨平台兼容性和国际化支持。 3. **文件格式**:所有文件应遵循UNIX文件格式保存,即行尾使用LF(Line Feed)而非Windows的CRLF(Carriage Return + Line Feed)或...

Global site tag (gtag.js) - Google Analytics