【问题标题】:How to convert one emoji character to Unicode codepoint number in JavaScript?如何在 JavaScript 中将一个表情符号字符转换为 Unicode 代码点编号?
【发布时间】:2018-07-03 07:16:00
【问题描述】:

如何在 javascript

中将此 ???? 转换为 1f600
'????'.charCodeAt(0);  

这将返回 unicode 55357 但如何从 ???? 获取 1f600

【问题讨论】:

  • 这个 npm 包有转换成 Unicode 的方法。 npmjs.com/package/emoji-unicode
  • @gurvinder372 我已经尝试过您的解决方案,但它不起作用。这不是重复的问题
  • @MitulGedeeya 在浏览器中怎么做??
  • @ParthGajjar 分享您在问题本身中尝试过的内容,以便我们知道您已经尝试过什么。创建一个有效的 sn-p 演示问题本身。
  • 对不起,这将是服务器端渲染。 :) 让我用函数回答你

标签: javascript emoji emojione


【解决方案1】:

双向

let hex = "?".codePointAt(0).toString(16)
let emo = String.fromCodePoint("0x"+hex);

console.log(hex, emo);

【讨论】:

  • 非常感谢这里有反向功能!
  • \uD83D\uDE0A 先生,我需要将提到的唯一代码转换为表情符号吗?
  • @Kapilsoni try console.log( String.fromCodePoint("0xD83D","0xDE0A") ) (我明白了:? - 但是如果我更改这两个字符串的顺序,我会得到 ��,如果我将字符串连接到 "0xD83DDE0A" 我会得到异常
  • @KamilKiełczewski:先生,我的情况下 unicode 字符串是 \uD83D\uDE0A。如果直接将 \uD83D\uDE0A 放入 fromCodePoint 则不起作用。我可以转换成任何其他格式吗?
【解决方案2】:

添加脚本以在浏览器端进行转换

function emojiUnicode (emoji) {
    var comp;
    if (emoji.length === 1) {
        comp = emoji.charCodeAt(0);
    }
    comp = (
        (emoji.charCodeAt(0) - 0xD800) * 0x400
      + (emoji.charCodeAt(1) - 0xDC00) + 0x10000
    );
    if (comp < 0) {
        comp = emoji.charCodeAt(0);
    }
    return comp.toString("16");
};
emojiUnicode("?"); # result "1f600"

感谢https://www.npmjs.com/package/emoji-unicode

【讨论】:

  • 错了。当您从原始函数中删除 returns 并且没有添加正确的 ifselses 时,您更改了函数。正确的是这里的情况:raw.githubusercontent.com/IonicaBizau/emoji-unicode/…
  • 如果 emoji 是另外两个组合并且 charCodeAt 从 0 到 4 呢?例如:?‍♀️
  • (Javascript),如果您需要再次将其转换回 Emoji,请使用:String.fromCodePoint(parseInt ("1f600", 16))
  • 国家/地区标志无法正确呈现
  • @Parth Gajjar:先生,您能告诉我如何从 \uD83D\uDE0A 这个字符串中获取表情符号吗?
【解决方案3】:

这是我用的:

const toUni = function (str) {
  if (str.length < 4)
    return str.codePointAt(0).toString(16);
  return str.codePointAt(0).toString(16) + '-' + str.codePointAt(2).toString(16);
};

【讨论】:

  • 在我看来,这个 Proso(解决方案的提供者)的想法是正确的。根据 Mozilla developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… codePointAt 专门用于处理表情符号或图标。
  • ? 我的实验表明你不需要 toString(16)。如果 emoji 的长度为 2 个字符(s.length >1),则 0 位置 codePointAt(0) 会渲染 html 显示所需的 dec。
  • 我的错误,toString(16) 是获取十六进制值。
【解决方案4】:

请阅读This Link

这里是函数:

function toUTF16(codePoint) {
var TEN_BITS = parseInt('1111111111', 2);
function u(codeUnit) {
  return '\\u'+codeUnit.toString(16).toUpperCase();
}

if (codePoint <= 0xFFFF) {
  return u(codePoint);
}
codePoint -= 0x10000;

// Shift right to get to most significant 10 bits
var leadSurrogate = 0xD800 + (codePoint >> 10);

// Mask to get least significant 10 bits
var tailSurrogate = 0xDC00 + (codePoint & TEN_BITS);

 return u(leadSurrogate) + u(tailSurrogate);
}

【讨论】:

  • 如果你想让它使用 json 在 RESP API 中工作,最好的解决方案。它给出类似“\uD83D\uDE00”的输出(对于?)
【解决方案5】:

这是另一种方式。 Source

 "?".codePointAt(0).toString(16)

【讨论】:

【解决方案6】:

对于 emoji 到 unicode 的转换,您可以使用 emoji-unicode 包:

const emojiUnicode = require("emoji-unicode");
   
console.log(emojiUnicode("?"));
// => 1f525

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多