1. 字符串显示
- 字符串一般可由单引号、双引号、反引号来包裹显示
let str1 = 'abcd';
let str2 = "abcd";
let str3 = `abcd`;
- 在字符串中包含单引号、双引号
let str1 = 'a"bc"d';
let str2 = "a'bc'd";
let str3 = `a'b'"c"d`;
- 在字符串中包含特殊符号,可以使用反斜杠
\
转义
let str1 = 'a\'bc\'d';
let str2 = "a\"bc\"d";
let str3 = `ab\`cd`;
let str4 = "ab\\cd"; //反斜杠也可用反斜杠转义为字符串
4. join方法默认会以,
连接
2. Unicode
- 定义:Unicode 是一个字符编码标准,旨在为世界上所有的字符提供唯一的数字标识符(代码点)。
- 代码点:每个字符都有一个唯一的代码点,例如汉字“汉”的代码点是
U+6C49
。 - 在Unicode中将世界上所有字符(数字、字母、特殊符号、各国文字)都对应了一个二进制数字,一般都用十六进制四位表示法展示
字符串转Unicode
function strToUnicode(str){
let list = str.split('').map(v=>v.charCodeAt()); //将每一位转为十进制unicode码
list = list.map(v=>`\\u${v.toString(16).padStart(4,'0')}`); //转为16进制并拼接前缀
return list.join(''); //拼接返回
}
Unicode转字符串
function unicodeToStr(uStr){
let list = uStr.split('\\u');
list.shift();//去掉空位
list = list.map(v=>parseInt(v,16)); //将16进制转为十进制
list = list.map(v=>String.fromCharCode(v)); //十进制数字转为对应字符
return list.join(''); //拼接返回
}
UTF-8
|UTF-16
|UTF-32
Unicode
规定了每个字符对应的代码点(二进制数字,一般用十六进制表示)UTF-8
|UTF-16
|UTF-32
只是用不同的字节长度来存储这些代码点
UTF-8、UTF-16 和 UTF-32 之间的区别主要源于它们在存储和处理 Unicode 代码点时的设计目标和使用场景。以下是它们之间的主要区别和原因:
1. 字节长度
- UTF-8:
- 使用可变长度的编码,1 到 4 个字节表示一个字符。
- 优点:对于 ASCII 字符(U+0000 到 U+007F),只需 1 字节,节省空间;同时兼容 ASCII。
- UTF-16:
- 使用固定长度的 2 字节(对于大多数常用字符)和 4 字节(对于高代码点字符)。
- 优点:适合处理大量非 ASCII 字符的语言(如中文、日文),在这些情况下比 UTF-8 更高效。
- UTF-32:
- 使用固定长度的 4 字节表示每个字符。
- 优点:简单直接,便于随机访问字符,但占用空间较大。
2. 存储效率
- UTF-8:在存储 ASCII 字符时非常高效,但对于某些非 ASCII 字符,可能会占用更多字节。
- UTF-16:在处理大量非 ASCII 字符时更高效,但对于纯 ASCII 文本,可能会浪费空间。
- UTF-32:始终使用 4 字节,适合需要简单处理的场景,但在存储上效率最低。
3. 兼容性
- UTF-8:由于其与 ASCII 的兼容性,广泛用于网络协议和文件格式(如 HTML、JSON)。
- UTF-16:在某些操作系统和编程语言(如 Windows 和 Java)中更常用。
- UTF-32:通常用于内部处理和需要简单字符访问的场景,但不常用于文件存储。
4. 使用场景
- UTF-8:适合互联网和文件传输,因其节省空间和兼容性。
- UTF-16:适合需要频繁处理非 ASCII 字符的应用,如某些桌面应用程序。
- UTF-32:适合需要简单字符处理的应用,但由于其高内存占用,使用较少。
5. 总结
UTF-8、UTF-16 和 UTF-32 的设计差异反映了它们在存储效率、兼容性和使用场景上的不同需求,开发者可以根据具体应用选择合适的编码方式。
3. ASCII(American Standard Code for Information Interchange)
ASCII(American Standard Code for Information Interchange)是一种字符编码标准,但使用范围只有一些基础字符。
Unicode 和 ASCII 之间的关系可以总结如下:
1. 编码范围
-
ASCII:
- 使用 7 位二进制数,能够表示 128 个字符(0-127)。
- 包含基本的英文字母、数字、标点符号和一些控制字符。
-
Unicode:
- 设计为一个全球字符集,能够表示超过 143,000 个字符,涵盖几乎所有书写系统。
- 使用可变长度编码(如 UTF-8、UTF-16),支持多种语言和符号。
2. 兼容性
- Unicode 的前 128 个字符(U+0000 到 U+007F)与 ASCII 完全相同。这意味着任何有效的 ASCII 文本在 Unicode 中也是有效的。
- 这使得 Unicode 能够向后兼容 ASCII,允许旧系统和应用程序继续使用 ASCII 编码。
3. 扩展性
- ASCII 仅限于英文字符,而 Unicode 支持多种语言和符号,适合全球化应用。
- Unicode 通过不同的编码方式(如 UTF-8、UTF-16)提供了对更广泛字符集的支持。
4. 使用场景
- ASCII:适用于简单的英文文本和基本数据传输。
- Unicode:适用于需要处理多语言文本和特殊符号的现代应用程序。
总结
Unicode 是对 ASCII 的扩展,提供了更广泛的字符支持,同时保持与 ASCII 的兼容性。Unicode 使得计算机能够处理全球各种语言和符号,而 ASCII 则是其基础。Unicode码是包含了ASCII码的。
4. Base64 编码
Base64 编码是一种将二进制数据转换为 ASCII 字符串的编码方式。它常用于在需要以文本形式传输二进制数据的场景中,例如在电子邮件、URL 或 JSON 数据中。
主要特点:
-
编码原理:
- Base64 将每 3 个字节(24 位)数据转换为 4 个 ASCII 字符(每个字符 6 位),因此编码后的数据比原始数据大约增加了 33% 的大小。
-
字符集:
- Base64 使用 64 个字符来表示数据,包括:
- 大写字母:A-Z
- 小写字母:a-z
- 数字:0-9
- 特殊字符:+ 和 /
- Base64 使用 64 个字符来表示数据,包括:
-
填充:
- 如果输入数据的字节数不是 3 的倍数,Base64 会使用
=
字符进行填充,以确保输出的字符数是 4 的倍数。
- 如果输入数据的字节数不是 3 的倍数,Base64 会使用
使用场景:
- 数据传输:在网络协议中传输二进制数据(如图像、文件等)。
- 数据存储:在 JSON 或 XML 中嵌入二进制数据。
- 电子邮件:在 MIME 中传输附件。
示例:
以下是一个简单的 Base64 编码和解码示例:
// 编码
let str = "Hello, World!";
let encoded = btoa(str); // 使用 btoa() 进行编码
console.log(encoded); // 输出: "SGVsbG8sIFdvcmxkIQ=="
// 解码
let decoded = atob(encoded); // 使用 atob() 进行解码
console.log(decoded); // 输出: "Hello, World!"
总结
Base64 编码是一种方便的方式,用于在需要以文本形式处理二进制数据的场合,确保数据的完整性和可传输性。