我有一个 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 或类似的东西?