1

我有一个 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 本身的长度,所以我得到的索引通过搜索字符串与“/ByteRange”字符串在 UInt8Array中的实际位置不匹配,因此它在应该插入之前被插入。

有没有办法获得 UInt8Array 的 1 字节字符串表示,如 ASCII 或类似的东西?

4

1 回答 1

0

我通过改变解决了这个问题

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

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

于 2020-08-12T22:10:15.033 回答