Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java显示表情符号(jFrame)_Java_Iphone_Csv_Jframe_Emoji - Fatal编程技术网

用Java显示表情符号(jFrame)

用Java显示表情符号(jFrame),java,iphone,csv,jframe,emoji,Java,Iphone,Csv,Jframe,Emoji,我有一个从iPhone导入的csv文件,包括表情符号 使用iPhone时,该文件看起来像 但是如果我使用从计算机打开csv文件 如何在Java中处理这些字符以获得表情符号 当我将扩展名改为.txt时 这就是我得到的: 如何显示原始的iPhone表情符号?如果我做不到,那么我怎么能像.txt文件那样显示微笑呢 每个csv文件都有不同的表情符号 第一件事:什么是表情符号 它是中的一个代码点。您将注意到,此块位于BMP基本多语言平面之外,因为此块的所有代码点都大于U+FFFF 第二点:您的显示器如何

我有一个从iPhone导入的csv文件,包括表情符号

使用iPhone时,该文件看起来像

但是如果我使用从计算机打开csv文件

如何在Java中处理这些字符以获得表情符号

当我将扩展名改为.txt时

这就是我得到的:

如何显示原始的iPhone表情符号?如果我做不到,那么我怎么能像.txt文件那样显示微笑呢


每个csv文件都有不同的表情符号

第一件事:什么是表情符号

它是中的一个代码点。您将注意到,此块位于BMP基本多语言平面之外,因为此块的所有代码点都大于U+FFFF

第二点:您的显示器如何处理这些问题

这完全取决于显示器的性能和后处理。根据功能,可以理解您的字体可能有,也可能很多字体没有这样的代码点的图形。通过后处理,可以理解程序可能会以不同的方式处理这些代码点

在iPhone显示示例中,它识别代码点并将其替换为图像。在文本编辑器示例中,它使用了一种字体,该字体具有这些代码点的图形

第三点:为什么Excel显示这样的垃圾,而字体似乎有这些代码点的图形

这是因为Excel中的一个长期存在的错误从未被修复:它总是假设CSV文件是用windows-1252而不是UTF-8编码的;仅当文件中的第一个代码点是一个字符串时,才会将其视为UTF-8

好的,考虑到所有这些问题:

如何在Java中处理这些字符以获得表情符号

你不需要做任何特别的事情;只需使用正确的字符集打开文件,该字符集将是StandardCharsets.UTF_8,或者,如果您不幸没有使用Java 7+,则使用Charset.forNameUTF-8;然后将内容显示为文本

当然,使用的字体需要有表情符号的图示,见上图

如何显示原始的iPhone表情符号

您需要对字符流输入进行后期处理,识别表情符号并用图像替换它们。这里有一个陷阱:Java中的一个字符只有16位,因此需要两个字符来编码一个笑脸

因此,这不是一项容易的任务;这是可能的,但并不容易。幸运的是,从Java8开始,您可以使用提醒:String实现了CharSequence,它将向字符串中返回代码点的IntStream;示例代码:

public final class Foo {

    // Same signature as an IntComsumer...
    private static void handleCodePoint(final int codePoint)
    {
        if (Character.UnicodeBlock.of(codePoint).equals(Character.UnicodeBlock.EMOTICONS)) {
            // treat as an emoticon
        } else {
            // treat as non emoticon
        }
    }

    // ...

    public void doDisplay(final String input)
    {
        // ... therefore usable in an IntStream's .forEach()
        input.codePoints().forEach(Foo::handleCodePoint);
    }
}

如果您使用Java 7或更少,嗯,这仍然是可能的,但要困难得多…

让我猜猜;您可以使用Excel打开CSVyes!,即使我用记事本打开文件,我怎么能用java显示它们呢!看看我的答案;这很长,但可能会有帮助。我想这比我想象的要难!,我正在使用java 7 update 71,我检查了这个网站并运行了代码,这是我得到的第1行:?测验第三行:?测验第4行:ً¬کɣ¬کک无法显示类似示例3 Notepad的表情符号。在我看来,您在打开文件时使用的字符集不正确。既然您使用的是Java 7,请记住使用新的Java.nio.file API而不是file?目前如何打开文件进行阅读,例如java,nio.file,file file=new Filefile.txt;FileReader FileReader=新的FileReaderfile;BufferedReader BufferedReader=新的BufferedReaderfileReader;