You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

web3.utils.hexToAscii返回乱码,无法获取正确数据的问题咨询

解决web3.utils.hexToAscii()返回乱码问题

问题原因

你传入的十六进制字符串并非纯ASCII对应的十六进制,而是以太坊ABI编码的结构化数据。hexToAscii()仅能处理纯ASCII字符的十六进制编码,直接转换会把地址、数值、偏移量等非ASCII字节转成乱码,只有后续的字符串部分能正常解析。

正确解决方法

使用web3的ABI解码方法web3.eth.abi.decodeParameters()解析结构化数据,再拼接出预期结果:

步骤1:定义参数类型

根据传入的ABI数据结构,定义对应的参数类型数组:

const paramTypes = [
  'address',    // 转账发起地址
  'address',    // 转账接收地址
  'uint256',    // 转账数值(原始精度)
  'string',     // 描述文本1
  'string'      // 描述文本2
];

步骤2:解码数据并处理结果

// 你的目标十六进制数据
const hexData = '0x0000000000000000000000006fdaa94a8a24ec47f04b8b5b21c4bfcedf8c79560000000000000000000000006fd92ca99c1df9b3cc318bd8f54463537bb8b32900000000000000000000000000000000000000000000000000000000000002bc00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e546f6b656e207472616e7366657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033130310000000000000000000000000000000000000000000000000000000000';

// 解码ABI数据
const decoded = this.web3.eth.abi.decodeParameters(paramTypes, hexData);

// 处理数值精度(假设代币小数位为6,根据实际情况调整)
const amount = decoded[2] / Math.pow(10, 6); // 0x2bc = 700,700/1000000=0.0007

// 拼接预期结果
const finalResult = `${amount} ${decoded[3]} ${decoded[4]}`;
console.log(finalResult); // 输出:0.0007 Token transfer 101

关键说明

  • ABI编码的数据包含多类型结构化字段,不能直接用hexToAscii()全量转换,必须按对应类型解码。
  • 数值的小数位需要根据实际代币的decimals参数调整,示例中用6位是因为700转成0.0007符合预期。

内容的提问来源于stack exchange,提问作者premchand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:35:39