网页中的编码与乱码(4)--BOM编码

深入介绍了 html 页面使用 BOM 编码的情况, 它的优先级为什么最高以及具体的静态页面和动态响应的测试示例.

这一篇将介绍 BOM 在 html 页面编码中的运用. 在最前面曾提到, 它的优先级实际上是最高的, 在这里, 将具体介绍什么是 BOM, 还会解析为什么它的优先级最高, 然后还会构建一些具体的测试来验证这一点.

什么是 BOM?

关于什么是 BOM, 在这篇文章中有详细的介绍:

字符集与编码(七)--BOM

这里也稍微啰嗦几句, 内容也基本出自上述文章: BOM=Byte Order Mark, 翻译过来就是"字节顺序标识".

具体则分为两种: 小端序(Little endian)大端序(Big endian).

我们知道, 在记事本中 "另存为" 时可以选择编码, 有以下几种:

记事本 另存为 编码选择

这里的 Unicode 实际就是 UTF-16(小端序).

注: Java 平台中 UTF-16 缺省为 大端序, 与 Windows 恰好相反.

另: 记事本的 UTF-8 默认是带 BOM 的, 而多数 IDE 的编辑器 UTF-8 默认不带 BOM.

继续阅读

网页中的编码与乱码(3)--响应头 Content-Type 中的 charset 编码

深入介绍了响应头 Response Headers 中的 Content-Type 中的 charset 信息的应用, 包括许多在静态文档和动态文档中的实验与测试的细节, 以及一些具体配置和与文档内编码声明的优先级问题.

在上一篇说完了如何 通过文档内的编码声明来确定网页的编码 通过文档内的编码声明来确定网页的编码, 这一篇则开始具体讲述如何通过响应头下的 Content-Type 条目中的 charset 信息来确定文档的编码, 包括如何去配置这个响应头, 以及一些具体的实验, 还有它与文档内编码声明的优先级选择问题.

content-type 中的 charset

通过前面的介绍, 你已经知道了所谓的"响应头下的 Content-Type 条目中的 charset 信息", 就是这样:

Response Headers Content-Type charset utf-8

或这样的东西:

Response Headers Content-Type charset gbk

它指出了这段响应流的编码.

继续阅读

网页中的编码与乱码(2)--文档内编码声明(meta charset)

深入介绍了文档内编码声明的应用, 包括许多在静态文档和动态文档中的实验与测试的细节, 以及其它的一些注意事项等.

接着 上一篇中的讨论, 也是先从"文档内编码声明"讲起, 因为它是最直观也最容易控制的.

不过事实上也没有那么容易, 它还是很容易受各种因素干扰, 下面会详细介绍整个过程, 囊括了静态文档响应和动态文档响应两种情况, 以及各种其它注意事项.

文档内的 meta charset 编码声明

通过之前的介绍, 你已经知道了所谓的文档内 meta charset 声明:

<meta charset="gbk">

以上为 html5 的标准写法. 又或者这样(html4)

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

继续阅读

网页中的编码与乱码(1)--概述

授人以鱼不如授人以渔, 在这里我会告诉有关网页中的编码的一些事实与结论, 但我更希望传达给你分析问题的方法, 当你遇到乱码困扰时, 你能够独立迅速地分析并解决问题.

在之前谈了很多关于 字符集编码与乱码 的基础知识, 可以说, 如果你掌握了这些, 对于各种乱码问题, 就有了一个良好的基础, 基本能够分析甚至独立地解决各类的乱码问题.

自然, 基础问题的重要性无需多言, 但另一方面, 具体的问题也同样很重要. 据我的观察, 具体的问题有很多是关于 web 开发方面所碰到的乱码, 尽管从原理方面来说, 道理都是一样的, 但导致问题产生的许多细节还是值得一说的, 所以这次也打算具体谈谈这些方面.

首先谈网页中的编码与乱码问题, 之后还会谈表单的编码, 后台接收参数时的解码与乱码, url(uri) 的编码与解码, 文件下载中文件名的编码乃至数据库中的编码等等.

这些具体问题的分析要建立在字符集编码基础知识之上, 所以, 如果你觉得自己在基础方面还不够扎实,

比如, 字符集与编码的联系与区别是什么? Unicode 具体是如何编码的? 几种 Unicode 编码实现间的联系与区别是什么? 什么是 UTF-16 的代理对等等,

如果你尚不能很清晰地回答以上一些问题, 那么我还是建议你先看看那些基础的介绍, 这样在分析 web 开发中遇到的具体编码及乱码问题时, 理解得会更好.

继续阅读

字符集与编码(八)--ASCII 和 ISO-8859-1

摘要: 简单介绍了 ASCII 和 ISO-8859-1 两个常见的字符集(编码).

在前面其实也谈到了 ASCII 了, 但并没有很具体, 作为一个完整系列的一部分, 还是有必要谈一下, 也作为后面讨论的一些基础.

ASCII

它的全称是 American Standard Code for Information Interchange(美国信息交换标准代码), 是一个 7 位字符编码方案. 下面是它的一张简图(来自http://www.asciitable.com/index/asciifull.gif):

ascii table

ASCII 定义了 128 个字符, 包括 33 个不可打印的 控制字符(non-printing control characters) 和 95 个可打印的字符.

继续阅读