utf-8是字符集还是编码?

时间:2014-11-19 15:46:41

标签: html unicode utf-8

据我所知,Unicode是一个包含所有语言中所有可能字符的字符集。 Utf-8是一种表示内存中每个字符的方法。 如果是这样,我们为什么要这样做:

<meta charset="utf-8">

而不是

<meta encoding="utf-8">

在html文档中表示utf-8编码?

4 个答案:

答案 0 :(得分:4)

<meta charset="foo">是原始HTML 2.0 <meta http-equiv="Content-Type" content="text/html; charset=foo">构造的大部分兼容运气缩写。 meta http-equiv用于(以有限的方式)在HTML文档中走私HTTP标头,因此此构造等同于在封闭的HTTP响应的charset=foo标头上设置Content-Type

Content-Type HTTP标头取自最初用于电子邮件的MIME标准(RFC2045,最初是RFC1341)。这个标准称它为charset,因为它早于Unicode。在那些日子里,ISO-8559-1,cp1251等被认为是单独的字符集。只有当Unicode出现时,才将它们重新构造为One True字符集的编码子集。

现在网络已经将Unicode标准化(实际上是UTF-16代码单元,更多可惜)作为其角色模型,将其描述为encoding确实更准确。但名称charset已经停滞不前,因为没有迫切的需要解决它。

答案 1 :(得分:2)

UTF-8是Unicode的编码;把它想象成一个“#”字符集并不是很有用。

Unicode是一个长期努力来枚举字形&#39;在一个非常广泛的世界书写系统中(一个&#39;字形&#39;是你和我所谓的角色)。在Unicode中,每个字符都有一个数字 - 一个&#39;代码点&#39; - 识别它。因此,字形&#39; a&#39; (latin小写字母&#39; a&#39;)给出了代码点号97(前66个字符的代码点与ASCII中的数字相同并不是巧合。)

因此,一个&#39; Unicode字符串&#39;是一系列Unicode代码点。这些是抽象整数。

如果您想将此序列码序列实际序列化为文件或通过网络,则必须编码为字节序列。 那是&#39;编码&#39;是

UTF-8是执行此编码的几个标准配方之一; UTF-16和UTF-32是另外两个标准的,UCS-2是现在不推荐使用的。 UTF-8是一种采用整数序列(这些代码点)并将其转换为字节序列的方法。我认为Wikipedia page on UTF-8非常清楚。

乔尔·斯波尔斯基(Joel Spolsky)有一个很好的摘要叫做The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),这是......好吧......它的内容。

术语:&#39;字符集&#39;或代码页&#39;类似于ASCII或ISO-8859- n (例如,Latin-1块,ISO-8859-1)这是一个固定大小的表,它将一个数字与一个字符相关联。这个想法显然与Unicode的所有列表的概念重叠。字符&#39;以及Unicode有时被描述为“通用字符集”这一事实有助于模糊这种区别。但Unicode明确区分整数的抽象列表是&#39 ; unicode string&#39;,以及它在磁盘上出现的字节序列的编码,是一个非常有价值的。当你有一个Aha!&#39;时刻,看看为什么& #39;一个非常有用的想法,Unicode突然变得非常简单明了。)

答案 2 :(得分:1)

这两者之间曾经没有区别。例如,ASCII定义某些字节来表示某些字母。它既可以称为编码,也可以称为字符集。或者一个&#34;代码页&#34;对于这个问题。这些都是密切相关的术语,本质上意味着同样的事情。 &#34;编码&#34; 定义了以字节为单位编码某些字符的方式。 &#34; charset&#34; 是一组可由计算机[使用特定方法]表示的字符。 A&#34; 代码页&#34;是一个&#34;页面&#34;映射到字符的代码。这三个术语基本上都是一样的。

只有Unicode在其&#34;字符集之间引入了间接&#34;以及它们所代表的物理编码。对于大多数其他编码/字符集/代码页,情况也是如此。

他们在创建HTML时必须选择某些术语。他们和charset一起去了。它没有比他们选择encoding时更多或更少的意义。

答案 3 :(得分:0)

“字符编码用于表示某种编码系统的字符集。” - 维基百科。

UTF-8是一个字符集。它定义了哪些二进制值表示编码系统中的字符。例如。在UTF-8中,a = 01100001。没有字符集,Web浏览器/服务器可以选择对字母a使用不同的值。这会导致各种各样的问题。

在HTML5 5文档中,你应该把它放在&lt;头&gt;标记:

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

在HTML 4.01文档中,您应该将其放在&lt;头&gt;标签::

<meta charset="utf-8">