我想以更像网络的方式回答这个问题,为了回答这个问题,我们需要一点历史。Joel Spolsky写了一篇非常好的介绍性文章,介绍了每个开发人员都应该知道的关于 Unicode 字符编码的绝对最小值。在这里忍受我,因为这将是一个looong
答案。:)
作为历史,我将引用那里的一些引言:(非常感谢乔尔!:))
唯一重要的字符是古老的无重音英文字母,我们有一个称为 ASCII 的代码,它能够使用 32 到 127 之间的数字表示每个字符。空格是 32,字母“A”是 65,等等。这可以方便地存储在 7 位中。那时的大多数计算机都使用 8 位字节,因此您不仅可以存储所有可能的 ASCII 字符,而且您还有一整点的空闲空间,如果您是邪恶的,您可以将其用于您自己的狡猾目的。
一切都很好,假设你会说英语。因为字节最多可容纳八位,所以很多人开始思考,“天哪,我们可以将代码 128-255 用于我们自己的目的。” 问题是,很多人同时有这个想法,他们对从 128 到 255 的空间应该去哪里有自己的想法。
因此,现在“OEM 字符集”与 PC 一起分发,但这些仍然不同且不兼容。令我们当代惊讶的是——一切都很好!他们没有互联网,人们很少在具有不同语言环境的系统之间交换文件。
乔尔继续说:
事实上,当人们开始在美国以外的地方购买 PC 时,各种不同的 OEM 字符集就出现了,它们都将前 128 个字符用于自己的目的。最终,这个免费的 OEM 被编入了 ANSI 标准。在 ANSI 标准中,每个人都同意在 128 以下做什么,这与 ASCII 几乎相同,但是有很多不同的方法可以处理 128 及以上的字符,具体取决于您居住的地方。这些不同的系统被称为代码页。
这就是“Windows 代码页”最终诞生的方式。它们实际上是 DOS 代码页的“父级”。然后 Unicode 诞生了!:) 并且UTF-8是“另一种用于存储 Unicode 代码点字符串的系统”,实际上“0-127 的每个代码点都存储在一个字节中”,并且与ASCII相同。我将不再详细介绍 Unicode 和 UTF-8,但您应该阅读BOM、Endianness和Character Encoding作为一般信息。
关于“ANSI 阴谋”,微软实际上承认了Windows-1252在术语表中的错误标签:
所谓的 Windows 字符集(准确地说是 WinLatin1,或 Windows 代码页 1252)使用其中一些位置来存储可打印字符。因此,Windows 字符集与 ISO 8859-1 不同。Windows 字符集通常称为“ANSI 字符集”,但这是严重误导。它尚未获得 ANSI 的批准。
因此,ANSI 在引用 Windows 字符集时不是经过 ANSI 认证的!:)
正如 Jukka 指出的那样(感谢你的好答案)
Windows-1252 ISO Latin 1,也称为 ISO-8859-1 作为字符编码,因此代码范围 0x80 到 0x9F 是为 ISO-8859-1 中的控制字符(所谓的 C1 Controls)保留的,而在 Windows 中-1252,其中一些代码分配给可打印字符(主要是标点符号),其他代码未定义。
但是我个人的观点和技术理解是 Windows-1252 和 ISO-8859-1都不是 WEB 编码!:) 所以:
对于网页,请使用 UTF-8 作为内容的编码因此将数据存储为 UTF-8 并使用HTTP Header :将其“吐出” Content-Type: text/html; charset=utf-8
。
还有一种叫做HTML content-type meta-tag的东西:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
现在,当浏览器遇到这个标签时,实际上他们会从 HTML 文档的开头重新开始,以便他们可以重新解释声明编码的文档。仅当没有“Content-type”标头时才会发生这种情况。
如果您的系统用户需要从中生成的文件,请使用其他特定编码。例如,一些西方用户可能需要 Excel 生成的文件,或 Windows-1252 中的 CSV。如果是这种情况,请在该语言环境中对文本进行编码,然后将其存储在 fs 上并将其作为可下载文件提供。
在HTTP的设计中还有一点需要注意:内容编码分发机制应该像这样工作。
I.客户端通过以下方式请求具有特定内容类型和编码的网页:“Accept”和“Accept-Charset”请求标头。
二、然后服务器(或 Web 应用程序)将内容转码为该编码和字符集。
大多数现代网络应用程序都不是这种情况。Web 应用程序以 UTF-8 提供(强制客户端)内容的实际情况。这之所以有效,是因为浏览器根据响应标头而不是它们实际预期的内容来解释接收到的文档。
我们都应该使用 Unicode,所以请,请,请尽可能使用 UTF-8 分发您的内容,并且最重要的是适用。否则互联网的长辈会缠着你!:)
PS 更多关于在网页中使用 MS Windows 字符的好文章可以在这里和这里找到。