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