字符集与编码
字符集对应多种编码方案。
1. ASCII
- 全称:美国信息交换标准码
- 编码范围:使用7位来表示每个字符,总共可以编码128个字符。
- 适用范围:主要适用于英文字符。
2. ISO-8859系列
- 全称:国际标准化组织的信息交换标准化码。
- 编码范围:使用8位(一个字节)来表示每个字符,总共可以编码256个字符。
- 适用范围:每个ISO-8859的子集(如ISO-8859-1,ISO-8859-2等)设计用来支持特定的语言群体,例如ISO-8859-1(也称为Latin-1)适用于大多数西欧语言。
3. Unicode
- 全称:统一码,旨在包含所有已知字符集的字符。
-
编码方案: Unicode定义了几种不同的编码方案,以适应不同的存储和传输需求,包括UTF-8、UTF-16和UTF-32。
- UTF-8:使用1到4个字节来表示每个字符,与ASCII兼容,广泛用于网页和电子邮件等。
- UTF-16:使用2个或4个字节来表示每个字符,主要用于现代的操作系统和环境,如Windows和Java平台。
- UTF-32:使用4个字节来表示每个字符,每个Unicode字符映射到一个固定的数值,但不如UTF-8或UTF-16高效。
编码方案兼容性
不论是ASCII、ISO-8859-1还是UTF-8编码,字符a的编码值都是97。这种一致性是故意设计的,以确保在不同编码标准之间具有良好的兼容性,特别是对于那些常用的英文字符。这也体现了UTF-8编码的一个重要优势:它在表示常用英文字符时与历史上广泛使用的ASCII编码兼容。
Base64编码
Base64是一种用64个字符来表示任意二进制数据的方法。
encodeURIComponent
当查询参数中包含特殊字符如&, =...
容易导致歧义,如localhost?name=xxx&zzz=
,真实意图是查询name 为 xxx&zzz=
的数据,服务器则会错误解析这个请求,解析为name=xxx, zzz=
两部分。为了避免服务器错误的解析,引入了encodeUriComponent,将特殊字符转义为%编码。encodeURIComponent("xxx&zzz") 结果为 xxx%26zzz%3D
,服务端需要使用decodeURIComponent('xxx%26zzz%3D')。
- 除了字母数字,特定字符 - . ( ...其它都会编码;
- 用于编码参数
encodeUri
假如你有一个含有空格的URL路径,你希望将其转换为有效的URI。这时候使用encodeURI就很合适。
原始字符串:http://example.com/文章 标题
使用encodeURI后:http://example.com/%E6%96%87%E7%AB%A0%20%E6%A0%87%E9%A2%98
- 除了字母数字,特定字符 - . ( ...,属于URI的特殊字符 / # & :..其它都会编码
- 用于编码整个URI