【问题标题】:Emoji not encoding表情符号不编码
【发布时间】:2016-08-24 02:05:22
【问题描述】:

我正在检索 Twitter 推文并尝试将它们保存到平面文件中。我有以下代码:

String jsonString = new Gson().toJson(tweets);

 byte[] utf8JsonString = jsonString.getBytes("UTF-8");

 String utf8json = new String(utf8JsonString, "UTF-8");

System.out.println( utf8json);

输出:

..."id":768260789744443392,"text":"#emojicity5 ?","source"...

表情符号(就在#emojicity5 之后)显示为?。我曾尝试使用 UTF-8、UTF-16BE、UTF-16LE、UTF-32BE 和 UTF-32LE 进行编码,但无济于事。该系统使用jdk 1.6 和3.0.3 of twitter4j。我在这里想念什么?

【问题讨论】:

  • 问题可能与您控制台中的字体有关吗?该值应该是正确的,但您的输出无法显示它。

标签: java json decode encode emoji


【解决方案1】:

字符串已经包含 Unicode,无需转换回相同的字符串。 何时往返byte[] 需要指明这些字节的编码。

但问题是控制台可能没有像 UTF-8 这样的 Unicode 编码,甚至可能没有字体中的表情符号。 System.out.println 的问题。在这种情况下,System.out 采用了无法代表表情符号的其他编码,而是打印了一个问号。

检查表情符号是否到达的方法是转储 Unicode 代码点。

在 Java 8 中:

jasonString.toCodePoints()
        .filter(cp -> cp >= 256)
        .forEach(cp -> {
            System.out.printf("U+%X = %s%n",
                cp, Character.getName(cp));
         });

boolean containsEmoji(String s) {
    return s.codePoints().anyMatch(cp ->
        UnicodeBlock.of(cp).equals(UnicodeBlock.EMOTICONS));
}

【讨论】:

    猜你喜欢
    • 2017-10-28
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多