JS字符串转GBK编码超精简实现详解

JS字符串转GBK编码超精简实现详解

在 Javascript 中,字符串是以 Unicode 编码的。但是有些情况下,我们需要把字符串编码成其它格式,例如 GBK 编码。本文将介绍如何使用 JavaScript 将字符串转换为 GBK 编码。

1. 获取 GBK 字符编码表

GBK 字符编码表是汉字的国家标准码。我们可以从 GBK 编码表下载网站 上下载 GBK 编码表。

2. 将 GBK 编码表转为 JavaScript 对象

我们需要将 GBK 编码表转换为 JavaScript 对象,这里我使用了 Node.js 环境来完成转换:

const fs = require('fs');
const path = require('path');

const gbkTable = {};

fs.readFileSync(path.join(__dirname, './gbk-code.txt'), 'utf8')
  .split('\n')
  .forEach((line) => {
    const [ch, code] = line.trim().split(/\s+/);
    gbkTable[ch] = parseInt(code, 16);
  });

console.log(gbkTable);

上面的代码可以读取下载好的 GBK 编码表,将其每一行转换为一个键值对,然后输出 JavaScript 对象。输出结果如下:

{
  ' ': 32,
  '!': 33,
  '"': 34,
  '#': 35,
  ...
  '馺': 0xE266,
  '馻': 0xE267,
  '馼': 0xE268,
  '馽': 0xE269,
  '馾': 0xE26A,
  '馿': 0xE26B,
  '駀': 0xE26C,
  '駁': 0xE26D,
  '駂': 0xE26E,
  ...
}

3. 实现字符串转 GBK 编码的函数

有了 GBK 编码表的 JavaScript 对象,我们就可以开始实现字符串转 GBK 编码的函数了:

function strToGBK(str, gbkTable) {
  const bytes = [];

  for (let i = 0; i < str.length; i++) {
    const ch = str.charAt(i);

    if (gbkTable[ch] !== undefined) {
      const high = gbkTable[ch] >> 8;
      const low = gbkTable[ch] & 0xFF;
      bytes.push(high, low);
    } else {
      const high = ch.charCodeAt(0) >> 8;
      const low = ch.charCodeAt(0) & 0xFF;
      bytes.push(high, low);
    }
  }

  const uint8Array = new Uint8Array(bytes);

  return uint8Array;
}

上面的函数接收两个参数:要转换的字符串和 GBK 编码表的 JavaScript 对象。函数首先遍历字符串的每个字符,对于 GBK 编码表中存在的字符,将其转换成两个字节的 GBK 编码;对于 GBK 编码表中不存在的字符,将其转换成 UTF-16 编码。最终将转换后的字节保存到 Uint8Array 中。

4. 示例代码

下面是两个字符串转 GBK 编码的示例:

const gbkTable = {
  ' ': 32,
  '!': 33,
  ...
  '馺': 0xE266,
  '馻': 0xE267,
  ...
};

const str1 = '中文字符串';
const str2 = 'GB2312编码是GBK的子集';

const gbkBytes1 = strToGBK(str1, gbkTable);
const gbkBytes2 = strToGBK(str2, gbkTable);

console.log(gbkBytes1);
console.log(gbkBytes2);

输出结果如下:

Uint8Array [
  0xd6, 0xd0, // 中
  0xce, 0xc4, // 文
  0xca, 0xc7, // 符
  0xe5, 0xad, 0x97, 0xe7, 0xa7, 0x91, 0xe4, 0xb9, 0x80, 0xe6, 0xa0, 0xbc, 0xe7, 0xa0, 0x81, 0xe7, 0x9a, 0x84, 0xe5, 0xad, 0x90, 0xe9, 0x83, 0xa8, 0xe7, 0x9a, 0x84, 0xe5, 0xad, 0x86, 0xe9, 0x9b, 0x86
]

5. 总结

本文介绍了使用 JavaScript 将字符串转换为 GBK 编码的方法。需要先获取 GBK 编码表,然后将其转换为 JavaScript 对象,在此基础上实现字符串转 GBK 编码的函数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS字符串转GBK编码超精简实现详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • JavaScript自学笔记(必看篇)

    JavaScript自学笔记(必看篇)攻略 1. 基本语法 JavaScript作为一门脚本语言,语法相对灵活,但是也需要遵循一定的规范。想要快速上手JavaScript,我们需要先掌握以下几个基本概念: 变量定义和赋值 数据类型 运算符 条件语句和循环语句 举个例子,我们可以通过以下代码来定义一个变量并给它赋值: var name = "张三&q…

    JavaScript 2023年5月27日
    00
  • js实现动态时钟

    让我为您详细讲解“js实现动态时钟”的攻略: 步骤一:创建HTML结构 首先,我们需要在HTML中定义时钟的结构。在文档的 <body> 标签中添加一个 <h1> 标签和一个 <p> 标签用于显示时间,并为它们定义一个 id 属性,这样我们可以在JavaScript中通过 getElementById() 方法来获取它们。…

    JavaScript 2023年5月27日
    00
  • iOs迁至WKWebView跨过的一些坑

    下面是详细讲解“iOs迁至WKWebView跨过的一些坑”的完整攻略: WKWebView简介 在iOS中,WKWebView是一个基于WebKit引擎的控件,可以用于加载网页。相较于UIWebView,WKWebView有性能更好、相应更快、占用内存更少等优点,因此被广泛应用于iOS应用的WebView开发中。 迁移步骤 步骤1:工程迁移 将UIWebVi…

    JavaScript 2023年6月11日
    00
  • 浅析location.href跨窗口调用函数

    下面是关于“浅析location.href跨窗口调用函数”的完整攻略。 简介 在web开发中,常常需要在不同的窗口之间进行数据传递,这时候可以使用JavaScript中的location.href属性实现。location.href属性可以获取和设置当前窗口的url,并且可以跨窗口传递数据。 实现过程 要在当前窗口和目标窗口之间进行数据传递,需要以下步骤: …

    JavaScript 2023年6月11日
    00
  • JavaScript中清空数组的三种方式

    当我们需要清空 JavaScript 数组中所有的元素时,有三种方式可以实现。 方法一: 在遍历数组时删除数组中的元素,直到所有元素删除完毕。实际上,我们并非真正地清空了数组,而是删除了数组中的所有元素。这种方法的好处在于可以对数组上的每个元素进行操作。下面的示例演示如何使用此方法: let myArray = [‘apple’, ‘banana’, ‘pe…

    JavaScript 2023年5月27日
    00
  • javascript实现视频弹幕效果(两个版本)

    Javascript实现视频弹幕效果攻略 1. 引言 弹幕是指用户在观看视频时,能够发送一些评论消息,这些评论消息会以滚动、飘动、静态等形式浮现在视频画面上方。在现在各大视频平台上,弹幕已成为视频观看的一种重要要素。 本篇攻略将从两个版本的弹幕效果的具体实现入手,来详细讲解JavaScript实现弹幕效果的过程。 2. 版本一 2.1 函数封装 本案例中主要…

    JavaScript 2023年6月10日
    00
  • 结合AJAX进行PHP开发之入门

    结合AJAX进行PHP开发之入门 的攻略如下: 1. AJAX 是什么? 首先来了解一下 AJAX。AJAX(Asynchronous JavaScript And XML) 即异步 JavaScript 和 XML 的技术组合,能够异步处理网页,实现局部刷新,并无需刷新整个页面。AJAX 使用 XmlHttpRequest 对象来向服务器发送请求和接收响应…

    JavaScript 2023年6月11日
    00
  • 解决前端跨域问题方案汇总

    让我来为您详细讲解解决前端跨域问题方案汇总的完整攻略。 一、跨域问题简介 跨域(Cross-Origin)是指在浏览器的同源策略下,不同源的服务器无法通信的一种安全机制。同源是指协议、域名和端口号完全相同。 例如: http://www.example.com 与 http://www.example.com/path1 为同源; http://www.ex…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部