我正在尝试生成一个文档(电子表格,无论如何),它显示特定机器上的哪些字体支持特定脚本中的特定字形:所以我可以机器检查特定字体是否适合呈现特定脚本或不
在给定特定“脚本”的情况下,是否存在将返回完整字符列表的Java API;说'拉丁','希腊','平假名'等?
以下代码将输出特定脚本的已定义字符的完整列表。
例如希腊语。
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.List;
public class CharacterTest {
public static List<char[]> getListofCharacters(String StartCode, String EndCode) {
List<char[]> characters = new ArrayList<>();
int start = Integer.parseInt(StartCode, 16);
int end = Integer.parseInt(EndCode, 16);
for (int i = start; i <= end; i++) {
if (java.lang.Character.isDefined(i)) {
char[] c = java.lang.Character.toChars(i);
characters.add(c);
}
}
return characters;
}
public static void main(String[] args) throws IOException {
List<char[]> GreekCharacters = getListofCharacters("0370", "03FF");
try (PrintStream out = new PrintStream("C:\\GREEK.TXT", "UTF-8")) {
for (char[] ch : GreekCharacters) {
out.println(String.valueOf(ch));
}
out.flush();
}
}
}
我从Unicode图表站点获得了开始/结束代码点: http://www.unicode.org/charts/
具体来自此PDF:http://www.unicode.org/charts/PDF/U0370.pdf
[顺便说一下,我不确定为什么API会提供'getChars'而不是'getChar' - 我对UTF-8的理解显然在这里缺乏:我原以为我会想到'char'会是曾经代表一个符号? (它本身当然可以由多个字节组成)...]
答案 0 :(得分:2)
脚本不连续范围,您的代码错过了several hundred希腊字符。如果您需要查询特定字符的脚本,请使用Character.UnicodeScript
类 - 但如果确实需要完整列表,则需要阅读UCD data files或列举所有代码点:
import java.lang.Character;
import java.util.ArrayList;
import java.util.List;
List<Integer> code_points = new ArrayList<Integer>();
for (int cp = Character.MIN_CODE_POINT; cp < Character.MAX_CODE_POINT; ++cp) {
if (Character.UnicodeScript.of(cp) == Character.UnicodeScript.GREEK) {
code_points.add(cp);
}
}