【问题标题】:Converting emoji from hex code to unicode将表情符号从十六进制代码转换为 unicode
【发布时间】:2017-06-23 00:22:14
【问题描述】:

我想在我的 iOS 和 Android 应用中使用表情符号。我检查了表情符号列表here,它列出了表情符号的十六进制代码。当我尝试直接使用 U+1F600 等十六进制代码时,我在应用程序中看不到表情符号。我发现了另一种表示表情符号的方式,类似于\uD83D\uDE00。使用此符号时,在应用程序中可以看到表情符号,无需任何额外代码。我认为这是表情符号的 Unicode 字符串。我认为这更像是一个特定于表情符号的一般问题。如上所示,如何将表情符号十六进制代码转换为 Unicode 字符串。我没有找到列出表情符号的 Unicode 的任何列表。

【问题讨论】:

  • 你在使用 Swift 吗?如果是这样,那么"\u{1f600}" 工作正常。现代 JavaScript 也是如此。对于 Java,appendCodePoint 应该可以工作。你能给我们更多关于你想要做什么的信息吗?还是您正在寻找将代码点转换为 UTF-16 的通用算法?
  • 1F600 是完整的 Unicode。 D83D DE00 是该 Unicode 的 UTF-16 编码。您可以使用 RayToal 评论中显示的完整 Unicode,也可以使用任何 Unicode 到 UTF-16 的转换器,或者列出 UTF-16 的 Emoji 表,例如 punchdrunker.github.io/iOSEmoji/table_html/index.html

标签: unicode emoji


【解决方案1】:

看来您的问题实际上是“我如何显示一个字符,知道它的代码点?”

这个问题原来是相当依赖于语言的!现代语言在这方面几乎没有问题。在 Swift 中,我们这样做:

$ swift
Welcome to Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1). Type :help for assistance.
  1> "\u{1f600}"
$R0: String = "?"

在 JavaScript 中也是如此:

$ node
> "\u{1f600}"
'?'

在 Java 中,您必须做更多的工作。如果你想直接使用代码点你可以说:

new StringBuilder().appendCodePoint(0x1f600).toString();

序列"\uD83D\uDE00" 也适用于所有三种语言。这是因为这些“字符”实际上是 Unicode 所称的 代理项,当它们以某种方式组合在一起时,它们代表单个字符。这一切如何运作的细节可以在网上的很多地方找到(寻找 UTF-16 编码)。算法就在那里。简而言之,您获取代码点,减去 10000 十六进制,然后像这样展开该差异的 20 位:110110xxxxxxxxxx110111xxxxxxxxxx

但是,如果您的语言支持良好,您应该直接使用代码点,而不是担心这种翻译。您也许还可以将表情符号字符复制粘贴到一个好的文本编辑器中(确保编码设置为 UTF-8)。如果您需要使用代理项,最好的办法是查找一个 Unicode 图表,该图表显示了一种称为“UTF-16 编码”的内容。

【讨论】:

  • 很好的解释。非常感谢。正如您在上下文中提到的,我可以通过使用\u{1f600} 来使用unicode。我在react-native 中使用它,然后将表情符号代码传递给 Swift 和 Java,它对它们都有效。
【解决方案2】:

在 Delphi XE 中 #$1F600 相当于 #55357#56832 或 D83D DE04 微笑。

在一个程序中,我使用它的方式如下:

const smilepage : array [1..3] of WideString =(#$1F600,#$1F60A,#$2764);

【讨论】:

  • 欢迎来到 SO!感谢您的意见,我为您调整了排版。
【解决方案3】:

JavaScript - 两种方式

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

console.log(hex, emo);

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2017-06-28
    • 2020-12-15
    • 2020-05-27
    • 2018-01-22
    • 2020-07-09
    • 2015-09-27
    • 2021-09-19
    • 2019-01-01
    相关资源
    最近更新 更多