将UTF-8数据转换为适当的字符串格式

Convert UTF-8 data into the proper string format

本文关键字:字符串 格式 UTF-8 数据 转换      更新时间:2023-09-26

如果我通过套接字接收UTF-8字符串(或者通过任何外部源),我希望将其作为正确解析的字符串对象。下面的代码显示了我所说的

var str='21'r'nJust a demo string 'xC3'xA4'xC3'xA8-should not be anymore parsed';
// Find CRLF
var i=str.indexOf(''r'n');
// Parse size up until CRLF
var x=parseInt(str.slice(0, i));
// Read size bytes
var s=str.substr(i+2, x)
console.log(s);
这段代码应该输出

只是一个演示字符串äè

但是由于UTF-8数据没有被正确解析,它只解析到第一个Unicode字符

只是一个演示字符串ä

有人知道如何正确转换这个吗?

似乎你可以使用这个decodeURIComponent(escape(str)):

var badstr='21'r'nJust a demo string 'xC3'xA4'xC3'xA8-should not be anymore parsed';
var str=decodeURIComponent(escape(badstr));
// Find CRLF
var i=str.indexOf(''r'n');
// Parse size up until CRLF
var x=parseInt(str.slice(0, i));
// Read size bytes
var s=str.substr(i+2, x)
console.log(s);

顺便说一句,当您混合使用UTF-8和其他类型的编码时,就会出现这种问题。你也应该检查一下

你应该使用npm上提供的utf8.js。

var utf8 = require('utf8');
var encoded = '21'r'nJust a demo string 'xC3'xA4'xC3'xA8-foo bar baz';
var decoded = utf8.decode(encoded);
console.log(decoded);