如果我通过套接字(或通过任何外部源)接收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字符
只是一个演示字符串Ã
有人知道如何正确转换吗?
答案 0 :(得分:1)
您似乎可以使用此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和其他类型的enconding时会出现这种问题。你也应该检查一下。
答案 1 :(得分:0)
您应该使用utf8.js available on npm。{/ p>
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);