在调试器中进行检查时 html 在以下代码中,以结尾 </html>\n 如预期,但在浏览器中收到的最后六个字符( /html> )缺少。
html
</html>\n
/html>
let html = this.code!.asHtml(); response.writeHead(200, { "Content-Type": "text/html; charset=utf-8", "Content-Length": html.length }); response.end(html);
当我这样注释内容长度标题时
let html = this.code!.asHtml(); response.writeHead(200, { "Content-Type": "text/html; charset=utf-8", //"Content-Length": html.length }); response.end(html);
传递的页面不再被截断。世界跆拳道联盟?!这意味着html。长度报告的字符数不正确。这可能与角色集有关,但我不确定如何继续,希望您能提供建议。
Content-Length 是正文的字节数,而不是字符数。
Content-Length
html。长度报告的字符数不正确。
.length 正在报告字符数(如果是UTF-8)或更精确的UTF-16代码单元。
.length
字符串对象的length属性包含字符串的长度,以UTF-16代码单位表示。length是字符串实例的只读数据属性。。。
与您的案例无关,但也需要了解:
... 长度返回的值可能与字符串中的实际字符数不匹配
回到您的问题:在UTF-8或16中,一个字符可能被多个字节编码。所以 html.length 可能确实太小了。使用 Buffer.byteLength(html, 'utf8') 相反
html.length
Buffer.byteLength(html, 'utf8')