Java 读文件和写文件,其中包含UTF-8字符(不同语言)

Java 读文件和写文件,其中包含UTF-8字符(不同语言),java,java-io,Java,Java Io,我有一个文件,上面有这样的字符:“Joh 1:1ஆதியிலே வார்த்தை இருந்தது, அந்த வார்த்தை தேவனிடத்திலிருந்தது, அந்த வார்த்தை தேவனாயிருந்தது. " ‎ 当我使用以下代码时: bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, "UTF8")); 输出为方框和其他奇怪的字符,如下所示: "�P�^����O���;�

我有一个文件,上面有这样的字符:“Joh 1:1ஆதியிலே வார்த்தை இருந்தது, அந்த வார்த்தை தேவனிடத்திலிருந்தது, அந்த வார்த்தை தேவனாயிருந்தது. "

当我使用以下代码时:

bufferedWriter = new BufferedWriter (new OutputStreamWriter(System.out, "UTF8"));
输出为方框和其他奇怪的字符,如下所示:


"�P�^����O���;� 因为您的输出以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();
StringBuilder缓冲区=新建StringBuilder();
try(InputStream encoded=…){
Reader decoded=新的InputStreamReader(编码,StandardCharsets.UTF_8);
char[]buffer=新字符[1024];
while(true){
int n=解码读取(缓冲区);
if(n<0)
打破
追加(buffer,0,n);
}
}
String verse=buffer.toString();

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

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


一个带有JTextPane的小JFrame也可以。

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

如何读取该文件?您有用于读取的代码吗?您将字符集名称作为字符串文字提供。名称,accord参考文件,是“UTF-8”。在调试器中验证字符串是否包含所需的Unicode字符。然后验证所使用的输出设备是否支持UTF8。在读取数据的位置显示代码。要读取
docx
文件,需要
docx
读卡器。不能将其视为纯文本进行读取。问题不在于语言,而在于文件格式@Zec如果你的意思是UTF8而不是UTF-8,那么就不是了。UTF8是UTF-8编码的别名。如果找不到编码,大多数API都会抛出一个
不支持的编码异常
明白了。谢谢。反正我也不需要回答Java问题。文件f=新文件(“E:\\bible.docx”);读卡器解码=新的InputStreamReader(新文件InputStream(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@Alfa查看输入解码是否正确的最简单方法是使用调试器查看内存中已解码的字符。如果您不熟悉调试器,可以打印一些字符的数值。它们应该在0x0B80-0x0BFFAlso范围内。因此,您确定输入是UTF-8编码的吗?这是我的猜测。我不熟悉泰米尔语的编码。文档实际上是Microsoft Word的XML格式吗?如果是,XML中指定了什么编码?
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();