将UTF-8数据转换为正确的string格式

如果我通过一个套接字(或通过任何外部来源)收到一个UTF-8string,我想把它作为一个正确parsing的string对象。 以下代码显示了我的意思

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); 

这个代码应该打印

只是一个演示stringäè

但是由于UTF-8数据没有被正确parsing,所以只能parsing到第一个Unicode字符

只是一个演示stringä

谁会有一个想法如何正确地转换这个?

看来你可以使用这个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和其他types的内容时。 你也应该检查一下。

你应该使用在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);