【问题标题】:Decode Unicode to character in javascript将Unicode解码为javascript中的字符
【发布时间】:2013-01-21 23:46:35
【问题描述】:

我有以下 unicode 序列:

          d76cb9dd0020b370b2c8c758

我随机尝试了非英文字符(在这个实验中,我尝试了韩语)作为上述unicode行的原文:

          희망 데니의

如何将上述 unicode 序列解码为原始形式?

【问题讨论】:

  • 上面的顺序是什么?它不是有效的十六进制编码 UTF-8。不过,它看起来像 UTF-16BE(你从哪里得到的?)。
  • @JanDvorak:我想是的,因为我是从总部的远程办公室得到的。我只是使用并尝试弄清楚如何解码它,幸运的是 Musa 和 gilly3 都已经给出了正确的答案。

标签: javascript utf-8 utf-16


【解决方案1】:

作为 JavaScript 字符串文字,使用 \u 转义十六进制代码:

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

或者直接在字符串中输入韩文字符:

var koreanString = "희망 데니의";

要处理表示 unicode 字符的十六进制字符串,请将十六进制字符串解析为数字,然后使用 String.fromCharCode() 构建 unicode 字符串:

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 相同。

【讨论】:

  • 非常感谢,Musa 和您都给出了正确答案。顺便说一句,我怎么知道 koreanString 的长度?是来自“我”吗?
  • @DoniAndriCahyono - 我用一些关于访问字符串长度的 cmets 编辑了我的答案。
  • 我将使用它来确定稍后通过 SMS/文本使用的字符长度,因为我正在开发基于 Web 的 SMS,并且它必须符合国际字符。无论如何,谢谢。
【解决方案2】:

怎么样

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

DEMO

【讨论】:

  • 谢谢。你和gilly3的答案都是我要找的。顺便说一句,我怎么知道它的 str 的长度?
  • @DoniAndriCahyono 只需使用字符串的 length 属性。见jsfiddle.net/mowglisanu/Y9uea/1
  • 我的意思是,unicode字符的长度和英文字符不同,对吧?那么,我该如何确定呢?是否使用您已经给出的 length 属性?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2017-11-23
  • 1970-01-01
  • 2021-01-26
  • 2013-10-17
  • 2018-09-21
相关资源
最近更新 更多