如果我通过套接字接收到一个 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);
这段代码应该打印出来
Just a demo string äè
但由于未正确解析 UTF-8 数据,它只解析到第一个 Unicode 字符
Just a demo 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 和其他类型的编码时,就会出现这种问题。您也应该检查一下。
关于javascript - 将 UTF-8 数据转换为正确的字符串格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24809826/