node.js - 当我将十六进制转换为 ascii 字符时如何获得正确的值
问题描述
我正在尝试使用 javascript 节点 js 将 hexa 文件转换为文本。
function hex_to_ascii(str1){
var hex = str1.toString();
var str = '';
for (var n = 0; n < hex.length; n += 2) {
str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
}
return str;
}
我有一个关于扩展 ASCII 字符的问题,例如,当我尝试转换 93 时,我得到 “ 而不是 ô,当我转换 FF 时,我得到 ÿ 而不是 (nbsp) 空格。
我想获得与此表相同的扩展字符:https ://www.rapidtables.com/code/text/ascii-table.html
解决方案
这个问题比最初看起来要复杂一些,因为在从扩展 ascii 转换为字符串时需要指定编码。例如 Windows-1252、ISO-8859-1 等。由于您希望使用链接表,我假设您希望使用CP437编码。
要将缓冲区转换为字符串,您需要一个可以为您执行此操作的模块,从缓冲区(以给定编码)转换为字符串并非易事,除非缓冲区采用本机支持的 node.js 编码,例如 UTF-8, ASCII(仅限 7 位!)、Latin1 等。
我建议使用iconv-lite包,这将转换许多类型的编码。安装后,代码应如下所示(这会将每个字符从 0x00 获取到 0xFF 并打印编码字符):
const iconv = require('iconv-lite');
function hex_to_ascii(hexData, encoding) {
const buffer = Buffer.from(hexData, "hex");
return iconv.decode(buffer, encoding);
}
const testInputs = [...Array(256).keys()];
const encoding = "CP437";
console.log("Decimal\tHex\tCharacter")
for(let input of testInputs) {
console.log([input, input.toString(16), hex_to_ascii(input.toString(16), encoding)].join("\t"));
}
推荐阅读
- azure-powershell - Azure 备份。只等到拍摄快照,而不是等到它被传输到 Vault
- python - Django 谷歌云存储:错误 400 无法上传图片文件
- python - 如何为三角形添加纹理?
- python - 转换列表列表中的元组列表(NP数组)
- node.js - 无法从 vscode 终端启动 mongodb
- r - 根据R中最近的时间戳左连接两个数据帧
- python - 如何仅将 h5 文件转换为 tflite 文件?
- email - Sendmail 无法在使用 Sendgrid 的 Google 实例中工作
- git - Git bash - 更改未暂存以提交
- asp.net-core - .NET 路由是否区分大小写?