Skip to main content

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)编码的韩文谚文字符的数据中。

为何仍然可行?

可以说没有这样的数据需要担心,这正是不兼容变化被认为可以接受的原因。

版本无关标签的条件

因此,在实践中,版本无关标签是有保证的,前提是:

  1. 标签被理解为指修订5之后的所有版本
  2. 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/*类型
稳定性标准保证兼容演进

相关链接