7

我有一个字符,例如:“ joh 1:1:ஆதியிலேஇருந்தது,அந்ததேவனிடத்திலிருந்தது,அந்ததேவனாயிருந்தது”。

www.unicode.org/charts/PDF/U0B80.pdf ‎</p>

当我使用以下代码时:

bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, "UTF8"));

输出是盒子和其他奇怪的字符,如下所示:

“�P�^����O֛����;�<�aYՠ؛”

任何人都可以帮忙吗?

这些是完整的代码:

File f=new File("E:\\bible.docx");
        Reader decoded=new InputStreamReader(new FileInputStream(f), StandardCharsets.UTF_8);
        bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, StandardCharsets.UTF_8));
        char[] buffer = new char[1024];
        int n;
        StringBuilder build=new StringBuilder();
        while(true){
            n=decoded.read(buffer);
            if(n<0){break;}
            build.append(buffer,0,n);
            bufferedWriter.write(buffer);
        }

在此处输入图像描述

StringBuilder 值显示 UTF 字符,但在窗口中显示时显示为框。

找到问题的答案!!!编码正确(即 UTF-8) Java 将文件读取为 UTF-8,字符串字符为 UTF-8,问题是在 netbeans 的输出面板中没有字体可以显示。更改输出面板的字体(Netbeans->tools->options->misc->output 选项卡)后,我得到了预期的结果。在 JTextArea 中显示时也是如此(需要更改字体)。但是我们不能更改 windows 的 cmd 提示符的字体。

4

3 回答 3

5

因为你的输出是用 UTF-8 编码的,但仍然包含替换字符 ( U+FFFD, �),我相信当你读取数据时会出现问题。

确保您知道输入流使用什么编码,并设置相应的编码InputStreamReader。如果那是泰米尔语,我猜它可能是 UTF-8。我不知道 Java 是否支持 TACE-16。它看起来像这样……

StringBuilder buffer = new StringBuilder();
try (InputStream encoded = ...) {
  Reader decoded = new InputStreamReader(encoded, StandardCharsets.UTF_8);
  char[] buffer = new char[1024];
  while (true) {
    int n = decoded.read(buffer);
    if (n < 0)
      break;
    buffer.append(buffer, 0, n);
  }
}
String verse = buffer.toString();
于 2013-08-01T04:09:57.087 回答
1

System.out离操作系统太近,不够通用。在您的情况下,NetBeans 控制台可能正在使用操作系统编码,并且 IDE 选择了字体。

先写入文件。如果您将其设为 HTML,您甚至可以双击它,并在内部指定正确的编码。请注意使用“UTF-8”,因为“UTF8”是 Java 特定的(“UTF-8”也可以在 Java 中使用)。也许与JDesktop.getDesktop().open("... .html");.

带有 JTextPane 的小型 JFrame 也可以。

于 2013-08-01T13:03:11.077 回答
0

事实证明,泰米尔语是 16 位编码的,所以只需使用 UTF-16 而不是 UTF-8。通过这样做,我能够在 Eclipse 控制台中打印泰米尔语文本。

于 2015-11-24T15:09:58.210 回答