2013-01-21 35 views
0

我有以下的unicode序列:解码Unicode向在javascript字符

  d76cb9dd0020b370b2c8c758 

我在非英语字符随机尝试(用于本实验中,我试图韩语的语)如上述的unicode行的原始:

  희망 데니의 

我该如何解码那些上述提到的unicode序列到原始形式?

+1

上面的顺序是什么?它不是有效的十六进制编码的UTF-8。它看起来像UTF-16BE(你是从哪里得到的?),但是。 –

+0

@JanDvorak:我觉得这是从总部的远程办公室得到的。我只是使用并试图找出如何解码它,幸运的是,穆萨和吉利已经给出了正确的答案。 –

回答

3

如何

var str = 'd76cb9dd0020b370b2c8c758'; 
str = '"'+str.replace(/([0-9a-z]{4})/g, '\\u$1')+'"'; 
alert(JSON.parse(str)); 

DEMO

+0

谢谢。你和我的回答都是我正在寻找的。顺便说一句,我怎么知道它的长度? –

+0

@DoniAndriCahyono只是使用字符串的'length'属性。请参阅http://jsfiddle.net/mowglisanu/Y9uea/1/ – Musa

+0

我的意思是,unicode字符的长度与英文字符不同,对吗?那么,我如何判断呢?你是否已经使用***长度***属性? –

4

作为一个JavaScript字符串字面量,逃生的十六进制代码与\u

var koreanString = "\ud76c\ub9dd\u0020\ub370\ub2c8\uc758"; 

或者刚刚进入韩国字符转换成字符串:

var koreanString = "희망 데니의"; 

要处理一个十六进制字符串表示Unicode字符,解析十六进制字符串到数字和构建Unicode字符串使用String.fromCharCode()

var hex = "d76cb9dd0020b370b2c8c758"; 
var koreanString = ""; 
for (var i = 0; i < hex.length; i += 4) { 
    koreanString += String.fromCharCode(parseInt(hex.substring(i, 4), 16)); 
} 

编辑:您可以通过访问其length得到任何字符串的长度物业:

var stringLength = koreanString.length; 

这将返回6。没有“英文”字符串。您有一个表示十六进制数字的字符串,而十六进制数字由拉丁字符集中的字符组成,但这些字符不是任何口头语言。他们只是数字。当然,您可以使用length属性获取十六进制字符串的长度,但我不确定为什么要这样做。这将是更直截了当地用数字而不是字符串数组:

var charCodes = [0xd76c, 0xb9dd, 0x0020, 0xb370, 0xb2c8, 0xc758]; 
var koreanString = String.fromCharCode.apply(null, charCodes); 

这样,charCodes.length将是相同的koreanString.length

+0

非常感谢,穆萨和你给出了正确的答案。顺便说一句,我怎么知道koreanString的长度?它来自'我'吗? –

+0

@DoniAndriCahyono - 我编辑了我的答案,关于访问字符串长度的一些评论。 – gilly3

+0

由于我正在开发基于网络的短信,并且它必须符合国际字符,所以我将使用它来确定稍后将通过短信/短信使用的字符的长度。不管怎么说,还是要谢谢你。 –