Java中的新字形?

时间:2016-01-28 20:14:43

标签: java unicode

有没有办法读取我想的新的unicode字符或字形,如Ever Green Green(U + 1F332),山(U + 26F0)和java中的男人(U + 1F574) ?我真的想把它实现到我正在写的游戏中,但我不知道如何。抱歉,Apache的扩展库是不可接受的。

2 个答案:

答案 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)));

第一个和第三个字符是代理对。