在目前的HTML文件中,使用的编码方式主要是UTF-8--可变长字符编码。
UTF-8是由最开始的ASCII码,经过多年的演变,收集全球符号、文字最后形成的字符编码。
我们这里介绍的字符编码主要集中于ASCII中,当然ASCII也包含在了UTF-8之中。
这里还是要谈一下进制的问题,进制分为二进制(即逢2进位)、八进制、十进制、十六进制。日常生活中接触最多的是十进制,但计算机可以处理的是二进制,八进制和十六进制在不同的场合也有相应的使用。
HTML中的码点显示是这样的:N(十进制,N代表数字),N(十六进制),这里是关注的重点,即表现形式。
举个例子:
hello
--这是一个简单的段落符hello是内容,首先根据ASCII码,将其转换为十进制
hello
上面就是转为十进制的编码表现形式,HTML可以进行编译,并将编译后的内容呈现出来。
hello
上面则是使用了十六进制的编码形式,依然可以识别
这里需要注意一下:HTML标签本身,并不能使用码点来进行表示,浏览器无法识别。
像:
转换为十进制<$#112>,或者将<>里面的p进行转换,无法识别,或者<p<将
全部转为十进制也是无法识别。仅标签之间的内容部分可以实现此操作。
<p<这种会在页面上将标签编译出来但不会执行。简单来说就是编译后
会出现在页面上,我们想要的标签效果不会出现,代码本身出现在页面上。
除了上面的内容字母等可以实现转码,HTML中自带的特殊字符也是非常实体编码中的重要内容。
<
:<
>
:>
"
:"
'
:'
&
:&
©
:©
#
:#
§
:§
¥
:¥
$
:$
£
:£
¢
:¢
%
:%
*
:$ast;
@
:@
^
:^
±
:±
空格:
这也是可以在页面显示出来的,但是在标签上也无法编译的。
URL又叫统一资源定位符,简单来说就是网址
URL组成:协议(http/https/ftp)://域名/IP:端口号+路径?/#实体参数
相较于HTML实体编码,URL的表现形式是这样的:%N(N是16进制)
比如:! %21 ( %28 ) %29
后面的数字呢就是ASCII码上所对应的十进制转换为了十六进制
UTF-8可变长的编码方式,实现是较为复杂的
编码规则(两条):
1、对于单字节的符号,字节第一位为0,后面7为为符号的Unicode码,这个可以查ASCII也可以获得。
2、对于n字节的符号,第一个字节的前n为设置为1,第n+1为设为0,后面的前两位一律设为10,剩下的二进制则为这个字符的Unicode码。
语言上的理解总是枯燥的,换个方式理解一下
Unicode符号范围(十六进制) | UTF-8编码方式(二进制)
0000 0000-0000 007F 0-127 | 0xxxxxxx
0000 0080-0000 07FF 128-2047 | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF 2048-65535 | 1110xxxx 10xxxxxx 10xxxxxx
根据范围呢,我们就可以判断符号为几字节,像英文字母就是1字节,像汉字就是3字节,一下表情符号则就是4字节。
1字节,a ASCII 97 97转为二进制1100001 填入编码 01100001 转十六进制61
3字节
中文字,一
首先转Unicode码,19968,范围3字节
然后转二进制,100111000000000
然后套进去,从右往左选取数字,缺位补0。11100100 10111000 10000000
最后转为16进制,8位一转。e4 b8 80