8. MIME registration (MIME注册)
本备忘录作为根据 [RFC2978] 注册UTF-8的MIME字符集参数的基础。
MIME字符集参数
字符集参数值: UTF-8
定义范围
此字符串标识包含文本的媒体类型,文本由以下字符组成:
- 来自ISO/IEC 10646的字符集
- 至少包括1993版本的第5号修订(韩文块)的所有修订
- 使用上述编码方案编码为八位字节序列
适用性
UTF-8适合在MIME内容类型中使用,位于"text"顶级类型下。
Content-Type: text/plain; charset=UTF-8
Content-Type: text/html; charset=UTF-8
Content-Type: application/json; charset=UTF-8
版本标识
值得注意的是,标签"UTF-8"不包含版本标识,而是泛指ISO/IEC 10646。这是有意为之,理由如下:
为何不使用版本号?
MIME字符集标签旨在提供仅解释在线接收的字节序列所需的信息,使其成为字符序列,仅此而已(参见 [RFC2045],第2.2节)。
兼容演进的情况
只要字符集标准没有发生不兼容的变化,版本号就没有用处,因为:
- 从标签中得知可能收到新分配的字符,但自己并不了解这些字符,这并没有带来任何好处
- 标签本身并没有教授任何关于新字符的知识
- 这些字符无论如何都会被接收
因此,只要标准兼容地演进,拥有标识版本的标签的明显优势只是表面的。
版本依赖标签的劣势
但是,这种版本依赖标签有一个劣势:
- 当较旧的应用程序收到伴随着较新的、未知标签的数据时
- 它可能无法识别该标签
- 完全无法处理数据
- 而一个通用的、已知的标签本来可以触发对数据的基本正确处理
- 数据可能根本不包含任何新字符
"韩文混乱"的特殊情况
"韩文混乱"(ISO/IEC 10646修订5)是一个不兼容的变化,原则上与上述版本无关MIME字符集标签的适当性相矛盾。
但兼容性问题只会出现在包含根据Unicode 1.1(或等效地,修订5之前的ISO/IEC 10646)编码的韩文谚文字符的数据中。
为何仍然可行?
可以说没有这样的数据需要担心,这正是不兼容变化被认为可以接受的原因。
版本无关标签的条件
因此,在实践中,版本无关标签是有保证的,前提是:
- 标签被理解为指修订5之后的所有版本
- ISO/IEC 10646的后续版本中不会发生不兼容的变化
如果ISO/IEC 10646的后续版本发生不兼容的变化,此处定义的MIME字符集标签将保持与先前版本一致,除非且直到IETF特别决定另有规定。
实际使用示例
HTTP响应头
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
<!DOCTYPE html>
<html>
...
电子邮件头
From: [email protected]
To: [email protected]
Subject: =?UTF-8?B?5rWL6K+V5Li76aKY?=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
你好,世界!
HTML meta标签
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>UTF-8 示例</title>
</head>
<body>
...
</body>
</html>
XML声明
<?xml version="1.0" encoding="UTF-8"?>
<root>
<text>你好,世界!</text>
</root>
关键要点
| 方面 | 说明 |
|---|---|
| 标签 | UTF-8(不区分大小写) |
| 版本 | 无版本号,指所有兼容版本 |
| 适用范围 | ISO/IEC 10646修订5及之后 |
| MIME类型 | 适用于text/*类型 |
| 稳定性 | 标准保证兼容演进 |
相关链接
- 上一章: 7. Examples (示例)
- 返回 RFC 3629 主页
- 下一章: 9. IANA Considerations (IANA考虑)