nicode 联盟(Unicode Consortium)
Unicode 联盟(Unicode Consortium)开发了 Unicode 标准(Unicode Standard)。他们的目标是使用标准的 Unicode 转换格式(即 UTF,全称 Unicode Transformation Format)取代现有的字符集。
Unicode 标准是一个成功的创举,在 HTML、XML、Java、JavaScript、E-mail、ASP、PHP 中都得到实现。Unicode 标准也得到许多操作系统和所有现代浏览器的支持。
Unicode 联盟与领先的标准开发组织合作,这些组织有 ISO、W3C 和 ECMA。
Unicode 字符集
Unicode 可以由不同的字符集实现。最常用的编码是 UTF-8 和 UTF-16:
字符集 | 描述 |
---|---|
UTF-8 | UTF8 中的字符可以是 1 到 4 字节长。UTF-8 可以代表 Unicode 标准中的任何字符。UTF-8 向后兼容 ASCII。UTF-8 是电子邮件和网页的首选编码。 |
UTF-16 | 16 位 Unicode 转换格式是一种可变长度的 Unicode 字符编码,能够编码整个 Unicode 指令表。UTF-16 主要用于操作系统和环境,如 Microsoft Windows、Java 和 .NET。 |
提示:Unicode 的前 128 个字符(与 ASCII 一一对应)使用一个与 ASCII二进制值相同的八位组进行编码,使有效的 ASCII 文本在进行 UTF-8 编码时也是有效的。
提示:所有的 HTML 4 处理器支持 UTF-8,所有的 HTML 5 和 XML 处理器支持 UTF-8 和 UTF-16!
HTML5 标准:Unicode UTF-8
因为 ISO-8859 中字符集大小是有限的,且在多语言环境中不兼容,所以 Unicode 联盟开发了 Unicode 标准。
Unicode 标准覆盖了(几乎)所有的字符、标点符号和符号。
Unicode 使文本的处理、存储和运输,独立于平台和语言。
HTML-5 中默认的字符编码是 UTF-8。
下面列出了一些 HTML5 支持的 UTF-8 字符集:
字符集 | 十进制 | 十六进制 |
---|---|---|
C0 控制与基本的 Latin(C0 Controls and Basic Latin) | 0-127 | 0000-007F |
C1 控制与 Latin-1 的补充(C1 Controls and Latin-1 Supplement) | 128-255 | 0080-00FF |
Latin 扩展 A(Latin Extended-A) | 256-383 | 0100-017F |
Latin 扩展 B(Latin Extended-B) | 384-591 | 0180-024F |
如果 HTML5 网页使用不同于 UTF-8 的字符,则需要在 <meta> 标签中指定,如下:
实例
<meta charset="ISO-8859-1">
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
HTML 中,正确的字符编码是什么?
HTML5 中默认的字符编码是 UTF-8。
这并非总是如此。早期网络的字符编码是 ASCII 码。
后来,从 HTML 2.0 到 HTML 4.01,ISO-8859-1 被认定为标准。
随着 XML 和 HTML5 的出现,UTF-8 也终于到来了,解决了大量的字符编码问题。
下面是关于字符编码标准的简短概述。
在开始的时候:ASCII
计算机信息(数字、文字、图片)在电子中是以二进制 1 和 0(01000101)进行存储的。
为了规范字母数字字符的存储,创建了 ASCII(全称 American Standard Code for Information Interchange)。它为每个存储字符定义了一个独特的二元 7 位数字,支持 0-9 数字,大/小写英文字母(a-z、A-Z)和一些特殊的字符,比如 ! $ + - ( ) @ < > 。
由于 ASCII 使用一个字节(7 位表示字符,1 位表示传输奇偶控制),所以它只能表示 128 个不同的字符。这些字符中有 32 个被保留作为其他控制目的使用。
ASCII 的最大的缺点是,它排除了非英文字母。
ASCII 今天仍然在广泛使用,尤其是在大型计算机系统中。
如需深入了解 ASCII,请查看完整的 ASCII 参考手册。
在 Windows 中:ANSI
ANSI(也称为 Windows-1252),是 Windows 95 及其之前的 Windows 系统中默认的字符集。
ANSI 是 ASCII 的扩展,它加入了国际字符。它使用一个完整的字节(8 位)来表示 256 个不同字符。
自从 ANSI 成为 Windows 中默认的字符集,所有的浏览器都支持 ANSI。
如需深入了解 ANSI,请查看完整的 ANSI 参考手册。
在 HTML 4 中:ISO-8859-1
由于大多数国家使用 ASCII 以外的字符,在 HTML 2.0 标准中,默认的字符编码更改为 ISO-8859-1。
ISO-8859-1 是 ASCII 的扩展,它加入了国际字符。与 ANSI 一样,它使用一个完整的字节(8 位)来表示 256 个不同字符。
如果 HTML 4 网页使用了不同于 ISO-8859-1 的字符集,则需要在 <meta> 标签中指定,如下所示:
实例
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-8">
如需深入了解 ISO-8859-1,请查看完整的 ISO-8859-1 参考手册。
在 HTML5 中:Unicode(UTF-8)
由于以上所列的字符集是有限的,在多语言环境中是不兼容的,所以 Unicode 联盟(Unicode Consortium)开发了 Unicode 标准(Unicode Standard)。
Unicode 标准覆盖了(几乎)所有的字符、标点符号和符号。
Unicode 使文本的处理、存储和运输,独立于平台和语言。
HTML5 中默认的字符编码是 UTF-8。
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
当浏览器在网页中检测到 ISO-8859-1 时,通常默认为 ANSI,因为除了 ANSI 有 32 个额外的字符这一点,其他方面 ANSI 基本等同于 ISO-8859-1。
HTML5 中默认的字符集是 UTF-8。
所有的 HTML 4 处理器都支持 UTF-8,所有的 HTML5 和 XML 处理器都支持 UTF-8 和 UTF-16。
多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)
Unicode是涵盖世界上大多数书写系统。用在网络,大多数操作系统,Java和.NET的标准编码等。
在Unicode诞生之前,都有自己的编码,它们都不同,而且不兼容编码。而Unicode是几乎所有字符的超集,因此可以用于互换信息。
它诞生至今30多年了。
在开始下文之前,如果遇到查询unicode代码的,可以使用工具类网站https://unicode.yunser.com/unicode
Unicode 为每个字符(例如a,?, ?,不和?)定义一个代码/数字。从Unicode 6.2开始(http://www.unicode.org/versions/Unicode6.2.0/),共有109,976个代码!
它还包括组合字符,诸如??之类,这些字符可以添加到其他字符中;这样,Unicode不需要字母和重音的每种可能组合设置一个代码。另一方面,Unicode的一般不关心字体或风格上的区别:比如下面两个是同一种字符:
Unicode不只是字符集合。它还涵盖了诸如UTF-8之类的标准编码。小写/大写/标题大小写映射,整理(排序),换行符,从右到左的脚本的渲染处理等。
因为Unicode是其他编码的超集,所以它有时包括同一个字符,但是却有多个不同的代码,例如,以下三个:
python输出
为了使它们在相等性测试等中被视为相同的字符串,您应该通过Unicode规范(http://unicode.org/reports/tr15/)运行所有输入。最常见的形式是 NFC(Normalisation Form C),它尽可能使用预先组合字符,并如果存在多个,则一个严格的顺序定义这变音符号。NFD D(Normalisation Form D)则尽可能撰写1个字符。只要您保持一致,使用哪种形式都没有关系。NFD通常更快(代码点更少),建议通过NFD运行输入,并通过NFC输出。
Compatibility decomposition/兼容性分解(NFKC,compatibility decomposition + canonical composition)会把?,Ⅸ和甚至?映射为为“FFI”,“IX”和“5”分别。搜索文本时,这种NFKC规范化功能会起到帮助。
在Unicode世界中,大小写并不是那么简单:
为了确保您的代码能够处理这些情况以及任何新的情况,Unicode提供了 一种单向 “ casefold”操作,该操作允许不区分大小写的比较。
排序(或排序规则)是特定于语言环境的,并且像大小写一样充满特殊性:
仅通过二进制比较进行排序是不够的。而且,代码点通常也不是明智的。幸运的是,Unicode指定了一种 可高度自定义的归类算法,该算法涵盖了所有边缘情况,并且做了一些巧妙的工作以使其变得相当快。这是一个示例:2
该UCA可以把“10”和“2”视为数值,如排序“10”“放在“2”后面?” 。把“?”视为字符串“问号”。
大端序有UTF-8,UTF-16和UTF-32。每种编码都保证几乎每个码点和字节序列的可逆映射。
国际字符 给域名带来了一个大问题。就像 I (I 0049 拉丁文大写 I)和 l(l 006C拉丁L的小写) 看起来很相似一样,Unicode除了增加了许多不可见的控制字符,空格字符和从右到左的文本外,还将这个问题放大很多。
浏览器和注册商已针对此采取了几种措施:
RFC 3491定义了nameprep,一种在字符串可以在域名中使用之前对字符串进行大小写折叠,规范化和清理的机制。如果使用了禁止的代码点,这将删除许多不可见的字符并抛出异常。
出于传统原因,DNS不允许ASCII之外的扩展字符,因此Punycode是ASCII兼容的编码方案。例如,café.com变为xn--caf-dma.com。所有Punycode编码的域组件都可以通过其xn--前缀立即识别。
这也适用于顶级域名 :比如中国的代码为xn-fiqs8s。
在Perl至少,一切(substr,length,index,reverse...)操作是以代码点为准。但这通常不是你想要的,因为用户认为像?这样的字符实际上是两个代码点(y + ??)。
甚至看似没问题的东西,例如printf "%-10s", $str完全中断组合字符,全角字符(例如中文/日文)或零角字符的操作。
一旦涉及到Unicode ,换行(或自动换行)就变得异常复杂。您必须考虑各种不间断和不间断的控制和空格字符,每种语言中的标点符号(例如?和?引号或数字中使用的句号或逗号)以及每个字符的宽度。
当您使用Unicode字符串作为文件或目录名称时,所有操作都不好用。使用什么编码?使用什么API?(Windows有两种,一种使用Unicode,另一种尝试使用与语言环境相关的编码)。Mac OSX文件系统则会执行规范化,例如对文件名执行NFD。如果您的平台不了解分解后的Unicode,则可能会出现问题。
汉字是中文,日文(汉字)以及韩文和越南文的共同特征。根据脚本的不同,许多脚本都有独特的视觉外观,但是Unicode出于简化和性能的原因将它们统一为一个代码点(示例)。
这引起了争议,因为角色的视觉形式可能有意义;可能不会向用户显示他们的国家/地区版本,而是其他国家/地区的版本。在某些情况下,它们看起来可能非常不同(例如,直)。正如西方名称的变化(例如“ John”或“ Jon”)一样,日语名称可能使用Unicode无法提供的特定字形变体,因此人们实际上无法以自己喜欢的方式来写自己的名字!
实际上,用户选择一种字体以其想要的样式呈现字形,无论是日语还是中文。变体选择器(参见下文)是解决该问题的另一种方法。
由于政治和遗留原因(与旧字符集兼容),Unicode不会尝试统一简体和繁体中文。
Unicode 6.0版增加了722个“表情符号”字符,这些表情符号通常在日语手机上使用,但最近在Mac OS X(Lion),Gmail,iPhone和Windows Phone 7中使用。某些字体可能选择将其呈现为全彩色表情符号。 ; 有些则可能根本不支持他们。
表情符号的Unicode表示,包含你熟悉的LOVE HOTEL 和PILE OF POO
Unicode 6.0的表情符号为许多国家(地区)标志引入了符号,但并不是全部国家。作为一种可选方案,范围U + 1F1E6 .. U + 1F1FF 定义了从A到Z的符号。如果该范围中的两个符号形成了ISO-3166-1国家代码(例如,法国的“ FR”),则渲染器可以显示为国旗!
变体选择器是代码点,可更改渲染字符之前的字符方式。有256个,它们占据的范围为U + FE00 .. U + FE0F 和U + E0100.. U + E01EF加上U + 180B,U + 180C和U + 180D。
它们对于蒙古语脚本来说是必不可少的,蒙古语脚本具有不同的字形形式,具体取决于其在单词中的位置,单词的性别,附近有哪些字母,单词是否为外国单词以及现代与传统拼字法(详细信息)。
预计这些将用于提供由Han Unification统一的字形的变体。
它们还用于更深奥的事物,例如数学运算符的衬线版本。
*请认真填写需求信息,我们会在24小时内与您取得联系。