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

JavaScript中Uint8Array转字符串出现乱码,如何正确转换?

问题分析与解决方法

你犯的核心错误是把哈希/二进制数据当成了UTF-8编码的文本数据来解码。这个32字节的Uint8Array看起来是加密哈希(比如SHA-256),这类二进制数据本身不是为人类可读文本设计的,直接用TextDecoder解码会因为大量字节不符合UTF-8编码规则,导致乱码甚至转换器报错。

正确的转换方式

1. 转换为十六进制字符串(最常用的哈希展示形式)

十六进制是哈希值的标准可读格式,每个字节用两位十六进制字符表示:

function uint8ArrayToHex(arr) {
  return Array.from(arr, byte => byte.toString(16).padStart(2, '0')).join('');
}

const hash = new Uint8Array([
    174, 157, 255, 238,  54, 143,  97, 132,
     70, 243,   7, 249,  98, 188,  68, 170,
     53,  82,  78,   9,  96, 226, 182, 160,
    131,  79,   3, 147, 153,  34, 205, 162
]);

console.log(uint8ArrayToHex(hash));
// 输出: ae9dffee368f618446f307f962bc4daa35524e0960e2b6a0834f03939922cda2

2. 转换为Base64字符串(适合传输或存储)

如果需要更紧凑的字符串形式,Base64是常用选择:

function uint8ArrayToBase64(arr) {
  return btoa(String.fromCharCode(...arr));
}

console.log(uint8ArrayToBase64(hash));
// 输出: rp3/7jY/YYSG8wH5YryUqjVSThlw4raghE8Dk5SSzaI=

额外说明

从32字节的长度和内容来看,这个Uint8Array大概率是加密哈希值(比如SHA-256恰好是32字节),使用上述两种方式转换是标准做法。如果API原本应该返回文本数据,那可能是你接收响应时的处理逻辑有误(比如没有使用API指定的编码格式解码),但这种情况概率极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:35:23