首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TextDecoder/TextEncoder将ArrayBuffer转换为String,然后返回到ArrayBuffer,返回不同的结果

使用TextDecoder/TextEncoder将ArrayBuffer转换为String,然后返回到ArrayBuffer,返回不同的结果
EN

Stack Overflow用户
提问于 2018-05-06 09:04:25
回答 1查看 5.9K关注 0票数 7

我有一个ArrayBuffer,它通过使用Frida读取内存返回。我正在将ArrayBuffer转换为字符串,然后使用TextDecoder和TextEncoder返回到ArrayBuffer,但是结果在这个过程中被改变了。解码和重编码后的ArrayBuffer长度总是变大.是否有一种广泛的字符解码方式?

如何在不丢失完整性的情况下将ArrayBuffer解码为字符串,然后返回到ArrayBuffer?

示例代码:

代码语言:javascript
复制
var arrayBuff = Memory.readByteArray(pointer,2000); //Get a 2,000 byte ArrayBuffer

console.log(arrayBuff.byteLength); //Always returns 2,000

var textDecoder = new TextDecoder("utf-8");
var textEncoder = new TextEncoder("utf-8");

//Decode and encode same data without making any changes
var decoded = textDecoder.decode(arrayBuff);
var encoded = textEncoder.encode(decoded);

console.log(encoded.byteLength); //Fluctuates between but always greater than 2,000
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-06 09:40:43

TextDecoderTextEncoder设计用于处理文本。若要将任意字节序列转换为字符串并返回,最好将每个字节视为单个字符。

代码语言:javascript
复制
var arrayBuff = Memory.readByteArray(pointer,2000); //Get a 2,000 byte ArrayBuffer

console.log(arrayBuff.byteLength); //Always returns 2,000

//Decode and encode same data without making any changes
var decoded = String.fromCharCode(...new Uint8Array(arrayBuff));
var encoded = Uint8Array.from([...decoded].map(ch => ch.charCodeAt())).buffer;

console.log(encoded.byteLength);

decoded字符串将具有与输入缓冲区完全相同的长度,可以很容易地使用正则表达式、字符串方法等操作。但请注意,占用内存中两个或两个以上字节的Unicode字符(例如"π")将无法识别,因为它们将导致与每个字节的代码对应的字符的串联。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50198017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档