计算字符串的字节大小

Beginner

This tutorial is from open-source community. Access the source code

简介

在这个实验中,你将学习如何使用 JavaScript 计算字符串的字节大小。在处理数据传输、存储计算或对数据大小有要求的 API 限制时,了解字符串的字节大小至关重要。

你将学习如何将字符串转换为 Blob 对象,并利用其属性来确定字符串的确切字节大小。这种技术在 Web 开发中处理文件上传、网络请求或数据存储优化时经常使用。

理解 JavaScript 字符串表示法

在计算字符串的字节大小之前,了解字符串在 JavaScript 中的表示方式非常重要。

在 JavaScript 中,字符串是 UTF-16 代码单元的序列。这意味着像表情符号或某些符号这样的字符可能需要多个字节来表示。例如,一个简单的英文字母占 1 个字节,但一个表情符号可能占 4 个字节。

让我们从在终端中启动 Node.js 开始:

  1. 点击 WebIDE 界面中的终端图标打开终端。
  2. 输入以下命令并按回车键:
node

你现在应该进入了 Node.js 交互式控制台,它看起来大概是这样的:

Welcome to Node.js v14.x.x.
Type ".help" for more information.
>
Open the node

在这个控制台中,你可以直接试验 JavaScript 代码。尝试输入以下命令来查看字符串的长度:

"Hello World".length;

你应该会看到输出:

11

这给出了字符数量,但不是实际的字节大小。字符数量和字节大小可能不同,尤其是在包含特殊字符的情况下。让我们在下一步中进一步探讨这个问题。

使用 Blob 计算字符串字节大小

既然你已经了解了字符串的表示方式,接下来让我们学习如何使用 Blob 对象计算字符串的实际字节大小。

Blob(二进制大对象,Binary Large Object)表示一个不可变的原始数据的类文件对象。通过将字符串转换为 Blob,你可以访问其 size 属性来确定字节大小。

在 Node.js 控制台中,让我们创建一个函数来计算字节大小:

const byteSize = (str) => new Blob([str]).size;

这个函数接受一个字符串作为输入,将其转换为 Blob,并返回其字节大小。

让我们用一个简单的例子来测试这个函数:

byteSize("Hello World");

你应该会看到输出:

11

在这种情况下,字符数量和字节大小相同,因为 "Hello World" 只包含 ASCII 字符,每个字符由一个字节表示。

现在让我们尝试一个非 ASCII 字符:

byteSize("😀");

你应该会看到输出:

4

这表明虽然这个表情符号看起来是一个字符,但实际上它占用了 4 个字节的存储空间。

使用不同类型的字符串进行测试

让我们来探究不同类型的字符如何影响字符串的字节大小。

在 Node.js 控制台中,让我们用各种字符串来测试我们的 byteSize 函数:

  1. 普通英文文本:
byteSize("The quick brown fox jumps over the lazy dog");

预期输出:

43
  1. 数字和特殊字符:
byteSize("123!@#$%^&*()");

预期输出:

13
  1. ASCII 和非 ASCII 字符的混合:
byteSize("Hello, 世界!");

预期输出:

13
  1. 多个表情符号:
byteSize("😀😃😄😁");

预期输出:

16

注意,当字符类型混合时,尤其是包含像中文字符和表情符号这样的非 ASCII 字符时,字节大小会大于字符数量。

在处理可能包含国际字符或特殊符号的数据时,理解这一点很重要,因为它会影响存储需求和数据传输大小。

让我们通过输入以下内容退出 Node.js 控制台:

.exit

这将使你回到常规的终端提示符。

创建一个实用示例文件

现在,让我们创建一个 JavaScript 文件,以更实用的方式实现我们的字节大小计算函数。这将展示你如何在实际应用中使用这个函数。

  1. 在 WebIDE 中创建一个新文件。点击文件资源管理器侧边栏中的“New File”图标,并将其命名为 byteSizeCalculator.js

  2. 在文件中添加以下代码:

/**
 * Calculate the byte size of a given string.
 * @param {string} str - The string to calculate the byte size for.
 * @returns {number} The size in bytes.
 */
function calculateByteSize(str) {
  return new Blob([str]).size;
}

// Examples with different types of strings
const examples = [
  "Hello World",
  "😀",
  "The quick brown fox jumps over the lazy dog",
  "123!@#$%^&*()",
  "Hello, 世界!",
  "😀😃😄😁"
];

// Display the results
console.log("String Byte Size Calculator\n");
console.log("String".padEnd(45) + "| Characters | Bytes");
console.log("-".repeat(70));

examples.forEach((example) => {
  console.log(
    `"${example}"`.padEnd(45) +
      `| ${example.length}`.padEnd(12) +
      `| ${calculateByteSize(example)}`
  );
});
  1. 按下 Ctrl+S 或从菜单中选择“File > Save”来保存文件。

  2. 从终端运行该文件:

node byteSizeCalculator.js

你应该会看到类似于以下的输出:

String Byte Size Calculator

String                                      | Characters | Bytes
----------------------------------------------------------------------
"Hello World"                               | 11         | 11
"😀"                                        | 1          | 4
"The quick brown fox jumps over the lazy dog" | 43         | 43
"123!@#$%^&*()"                            | 13         | 13
"Hello, 世界!"                              | 10         | 13
"😀😃😄😁"                                  | 4          | 16

这个表格清晰地展示了不同类型字符串的字符数量和字节大小之间的差异。

在以下情况下,理解这些差异至关重要:

  • 设置网页表单中用户输入的限制
  • 计算文本数据的存储需求
  • 处理有大小限制的 API
  • 优化网络数据传输

总结

恭喜你完成了「字符串字节大小计算」实验。你已经学会了:

  1. 字符串在 JavaScript 中如何以 UTF-16 代码单元的形式表示
  2. 如何使用 Blob 对象来计算字符串的字节大小
  3. 不同类型字符的字符数量和字节大小之间的差异
  4. 如何创建一个实用的工具来计算字符串的字节大小

这些知识在以下场景中非常有用:

  • 处理用户输入的 Web 应用程序
  • 数据存储系统
  • 有大小限制的网络请求和 API
  • 国际化和多语言应用程序

理解字符串的字节大小有助于确保你的应用程序正确管理数据存储和传输,尤其是在处理国际字符、表情符号和特殊符号时。