将UTF-8数据转换为正确的字符串格式

时间:2014-07-17 17:24:04

标签: javascript node.js unicode utf-8 character-encoding

如果我通过套接字(或通过任何外部源)接收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字符

  

只是一个演示字符串Ã

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

2 个答案:

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