微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Uint8Array中查找字符串的索引

如何解决在Uint8Array中查找字符串的索引

我有一个Uint8Array,它实际上是PDF文件内容。我想找到位于该数组中的某些字符串的索引,以便可以在该位置插入一些内容

为此,我实际上是将Uint8Array转换为字符串,然后在该字符串中搜索我想为其找到索引的字符串。

这是代码

    const pdfStr = new TextDecoder('utf-8').decode(array);
    
    // find Byterange
            const byterangePos = this.getSubstringIndex(pdfStr,'/Byterange [',1);
            if (byterangePos === -1) {
                throw new Error(
                    'Failed to locate Byterange.'
                );
            }
    
           getSubstringIndex = (str,substring,n) => {
            let times = 0,index = null;
    
            while (times < n && index !== -1) {
                index = str.indexOf(substring,index + 1);
                times++;
            }
    
            return index;
        }

array = this.updateArray(array,(byterangePos + '/Byterange '.length),byterange);

我遇到的问题是utf-8字符以可变长度(1-4个字节)的字节进行编码,因此我得到的字符串的长度小于UInt8Array本身的长度,因此通过搜索字符串得到的索引与UInt8Array中的'/ Byterange'字符串的实际位置不匹配,因此它应在应该插入的位置之前插入。

有什么方法可以获取UInt8Array的1字节字符串表示形式,例如ASCII还是类似的东西?

解决方法

我通过更改解决了问题

const pdfStr = new TextDecoder('utf-8').decode(array);

const pdfStr = new TextDecoder('ascii').decode(array);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?