我需要使用 javascript 将二进制字符串转换为 ascii 数组。 (UTF-16转ascii)

I need to convert a binary string to ascii array using javascript. (UTF-16 to ascii conversion)

我想将文本文件中的“二进制”数据读入 javascript 字符串(我这样做了)并将字节转换为 ascii 值数组。几天来我一直在努力完成这个,但找不到解决方案,因为我对 utf-16 或 js 没有足够的经验。

我要转换的数据不是文本。该网站上的大多数示例都处理诸如“Hello”之类的字符串,我无法开始工作。二进制数据由一些(准确地说是 220032 个)字节组成,这些字节的值介于 0 和 255 之间。

如果有人能指出正确的方向,我将不胜感激。

示例: 原始文件包括(我想要获取的字节数组): 十六进制:80 00 F5 03 7E 36 41 01(十进制:128 0 245 3 126 54 65 1)

对于我得到的这些字节(使用 charCodeAt): 十进制:65533 0 65533 3 121 94 20 1


关于这个问题的更多信息,因为Whosebug说它不够清楚。

我有一台热像仪,分辨率为 382x288,即 110016 像素。每个像素都用一个 unsigned short 表示,每个像素长 2 个字节。制作一帧热数据 220032 字节。我限制了 space,所以我不考虑 json、xml 等。所以我使用我编写的 C++ 程序从相机获取数据,并将其作为 ascii 写入文本文件字符。

客户希望在整个公司(电视、电脑、平板电脑等)的本地服务器上查看图像。所以我决定对这个项目采取 asp/javascript 的方式。我对 javascript 不是很好,所以直到很久以后才知道 javascript 使用 UTF-16 作为我不想要的字符串,因为我需要文件中每个字符的 ascii 代码。

感谢 'Joachim Sauer',他为我指出了正确的方向,我能够使用 fetch 和 Uint8Array 轻松解决问题。

async load_Frame(p_filename){
    await fetch("./frames/"+p_filename+".txt")
    .then(response=>{
        if (!response.ok) throw new Error("problem");
        return response.arrayBuffer();
    }).then(data=>{
         //Here i have the frame as i wanted.
         let frame = new Uint8Array(data);
    }
    }).catch(function(e){
          console.log(e);
    })
    }
    

和最终产品。 :) 我没有包括热转换例程,因为它们超出了问题的范围。

您不能将任意二进制数据解释为 UTF-8 并期望它能够工作(即能够往返)。

UTF-8 内置了一定数量的错误检测功能,这意味着有大量字节序列不是有效的 UTF-8。

那些会报错。

通常 这些错误会通过生成 a Unicode Replacement Character U+FFFD 悄悄地发出信号,但它们也可以通过某种异常或错误代码来报告。

U+FFFD 也 恰好是 Unicode 代码点 65533,所以这正是这里发生的事情。

一个或多个不是有效 UTF-8 序列的字节被“解码”为该替换字符。请注意,错误字节在结果字符串中不再可见:所有错误序列都折叠为该字符。有如何处理多个后续错误的特定规则,但从根本上说,您只是丢失了该信息。

我真的不能告诉你如何“解决”这个问题,因为从根本上来说,尝试将非文本二进制数据解释为 UTF-8 是行不通的。

如果您解释了为什么您想要这样做,我们可能会建议替代解决方案。这可能是一个 XY Problem.