用NextJS搭了个AI助手,但是ChatGPT在Stream模式下,中文偶尔会有乱码的问题,就像下面这样:
前端渲染代码:
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8'); // 默认UTF-8,可以不加
while (true) {
const { done, value } = await reader.read();
if (done) {
break;
}
const chunk = decoder.decode(value); // 这里有时会截断
console.log(chunk);
responseMessage.content += chunk;
setConversation((prevMessages) => [...prevMessages]);
}
解决:
由于汉字通常使用多个字节表示,解码中可能会遇到不完整的字节序列,从而导致乱码。
解决方法就是给decoder.decode()
方法加上stream:true
的参数,以支持流式区块解码。
- const chunk = decoder.decode(value);
+ const chunk = decoder.decode(value, { stream: true });
最终效果不再有乱码。
参考: