-1

我正在使用eclipseasIDE和尝试打印我得到的阿拉伯字符 ???????,所以我想打印Unicodeif 阿拉伯字符

String displayChar(char c) {
    if (c < '\u0010') {
        return "0x0" + Integer.toHexString(c);
    } else if (c < '\u0020' || c >= '\u007f') {
        return "0x" + Integer.toHexString(c);
    } else {
        return c+"";
    }
}

例如 :

displayChar('م'); // output is ?
4

3 回答 3

2

有很多方法可以在 Java 中获取 Unicode 字符。例如,如果您有一个以 UTF-8 正确编码的文件,那么这将获得以下字符:

    try (Reader reader = new FileReader(file, "UTF-8")) {
        // read characters from the reader ...
    }

您更新的问题似乎是说您真正的问题是显示字符,而不是“获取”它们。您尚未正确解释输出字符的方式位置,但我猜您问题的原因是以下之一:

  • 你没有安装阿拉伯字体(似乎不太可能......),
  • 显示字符的控制台(或其他)不理解阿拉伯字符(似乎不太可能......),
  • 字符已损坏;即它们不是您期望它们在 Java 程序中的样子,或者
  • 您在输出流中使用了错误的字符编码。

后者是最可能的解释,但正确的诊断需要更多关于您创建输出流/写入器和写入它的方式的信息。(提示:您添加到问题中的代码不会输出任何内容。它只是将字符转换为 Java 字符串。)

于 2012-08-05T13:58:16.800 回答
0

确保您的 Java 应用程序的文件编码以及您的版本系统支持 Unicode。例如,尝试将您的文件保存为 UTF-8。否则,您在编辑器窗格中看到的编码可能会丢失。为了获得最大的兼容性,您应该使用\u0645源代码中的代码点对您的字符进行编码。

当您显示字符时,请确保您的控制台支持 Unicode,并且它使用的字体也支持该字符。

[编辑]

哦,我对你的方法也有一个小的更新:

public static String displayChar2(char c) {
    if (c < 0x20 || c >= 0x80) {
        return String.format("\\u%04X", (int) c);
    }
    return Character.toString(c);
}
于 2012-08-05T17:53:24.170 回答
0

Java 中的字符只是数值——所以如果ch是一个字符,你可以做int i = ch;然后打印i. (这忽略了代码点与字符的复杂性——但我相信阿拉伯字母很好。)

于 2012-08-05T13:53:13.277 回答