JavaScript.Part.4 字符串

1. 字符串显示

  1. 字符串一般可由单引号、双引号、反引号来包裹显示
let str1 = 'abcd';
let str2 = "abcd";
let str3 = `abcd`;
  1. 在字符串中包含单引号、双引号
let str1 = 'a"bc"d';
let str2 = "a'bc'd";
let str3 = `a'b'"c"d`;
  1. 在字符串中包含特殊符号,可以使用反斜杠\转义
let str1 = 'a\'bc\'d';
let str2 = "a\"bc\"d";
let str3 = `ab\`cd`;
let str4 = "ab\\cd"; //反斜杠也可用反斜杠转义为字符串

1
4. join方法默认会以,连接
2

2. Unicode

  • 定义:Unicode 是一个字符编码标准,旨在为世界上所有的字符提供唯一的数字标识符(代码点)。
  • 代码点:每个字符都有一个唯一的代码点,例如汉字“汉”的代码点是 U+6C49
  • 在Unicode中将世界上所有字符(数字、字母、特殊符号、各国文字)都对应了一个二进制数字,一般都用十六进制四位表示法展示
    3
字符串转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(''); //拼接返回
}

4

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(''); //拼接返回
}

5

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 数据中。

主要特点:
  1. 编码原理

    • Base64 将每 3 个字节(24 位)数据转换为 4 个 ASCII 字符(每个字符 6 位),因此编码后的数据比原始数据大约增加了 33% 的大小。
  2. 字符集

    • Base64 使用 64 个字符来表示数据,包括:
      • 大写字母:A-Z
      • 小写字母:a-z
      • 数字:0-9
      • 特殊字符:+ 和 /
  3. 填充

    • 如果输入数据的字节数不是 3 的倍数,Base64 会使用 = 字符进行填充,以确保输出的字符数是 4 的倍数。
使用场景:
  • 数据传输:在网络协议中传输二进制数据(如图像、文件等)。
  • 数据存储:在 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 编码是一种方便的方式,用于在需要以文本形式处理二进制数据的场合,确保数据的完整性和可传输性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值