2013-12-20 36 views
2

我从php脚本中检索了以下文本(其中一些是中文字符)作为选择选项,但无法将它们变为可读字符(无论是通过php还是javascript),请咨询。通过javascript转换Unicode字符

\\xe8\\xac\\x9b\\xe5\\x91\\xa2D\\xe3\\x80\\x82 
+0

要做到这一点,首先必须知道角色所处的位置。上述内容似乎不是UTF-16(无论是LE还是BE;如果是的话,这会很简单)。所以这是第一件事。 –

+0

你能告诉应该是什么结果? –

+0

正确的字符串应该是“讲呢D.” – user2499325

回答

3
input = '\xe8\xac\x9b\xe5\x91\xa2D\xe3\x80\x82' 
console.log(decodeURIComponent(escape(input))) 

这给了你到底

講呢D。 

UPDATE

如果字符串确实包含\x字符,那么我们就可以将它们转换成%第一个:

input = '\\xe8\\xac\\x9b\\xe5\\x91\\xa2D\\xe3\\x80\\x82' 

decodeURIComponent(input.replace(/\\x/g, '%')) 
+0

我仍然无法正确理解,但可以通过浏览器的控制台看到正确的字符 http://www.imageupload.co.uk/images/2013/12/20/000.jpg – user2499325

+0

我修改了我的答案。 – punund

+0

万分感谢,终于,我明白了!感谢所有的答复! – user2499325

1

虽然@punund's answer是正确的,但也可以手动将字节转换为UTF转换。

在Unicode字符映射中,中文字符在00000800 - 0000FFFF范围内占用3个字节,因此您的字节串应该按3分组并转换为真正的UTF字符。

这里是一个可能的解决方案:

var str = '\\xe8\\xac\\x9b\\xe5\\x91\\xa2D\\xe3\\x80\\x82', 
    result = str.replace(/(\\{1,2}x[0-9a-f]{2}){3}/g, function(c) { 
     var u = eval('"' + c + '"'); 
     return String.fromCharCode(
      ((u.charCodeAt(0) & 15) << 12) | 
      ((u.charCodeAt(1) & 63) << 6) | 
       (u.charCodeAt(2) & 63)); 
    }); 

console.log(result); // "講呢D。" 

N.B .:同时使用evalnot recommended,在所提供的实例是完全无害的。

+0

感谢您的评论,我从线程学到了很多:) – user2499325