有没有办法读取我想的新的unicode字符或字形,如Ever Green Green(U + 1F332),山(U + 26F0)和java中的男人(U + 1F574) ?我真的想把它实现到我正在写的游戏中,但我不知道如何。抱歉,Apache的扩展库是不可接受的。
答案 0 :(得分:4)
正如我在评论中暗示的那样,您的问题不太可能是读取字符。 Java应该能够读取它们(并编写它们)。例如:
import java.io.*;
public class NewChars {
public static void main(String[] args) throws IOException {
// UTF-16 (surrogate pairs) for the two characters mentioned:
String theChars = "\ud87c\udf32\ud87e\udd74";
// Write the characters to a (UTF-8 encoded) byte stream:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer out = new OutputStreamWriter(baos, "UTF-8");
out.write(theChars);
out.close();
// Read the characters back
BufferedReader in = new BufferedReader(new InputStreamReader(
new ByteArrayInputStream(baos.toByteArray()), "UTF-8"));
String readBack = in.readLine();
// Check the result (prints "Readback is good"):
System.out.println(theChars.equals(readBack) ? "Readback is good"
: "Readback is bad");
}
}
问题很可能是您的系统没有包含这些字符的字形的字体。您描述的字形 - 内部带有问号的正方形或菱形 - 是在字符位置发出的常用替换字形之一,所选字体没有其他字形。
这不是Java问题。您需要更新的字体,可能来自您的操作系统供应商,它们可能可用也可能不可用。此外,最好避免依赖其他可能没有支持字体的字符,除非您只打算让您的程序在您开发它的计算机上按预期工作。< / p>
答案 1 :(得分:0)
试试这个
System.out.println(new String(Character.toChars(0x1f332)));
System.out.println(new String(Character.toChars(0x26f0)));
System.out.println(new String(Character.toChars(0x1f574)));
第一个和第三个字符是代理对。