Java 确定文件编码并打印umlaute

Java 确定文件编码并打印umlaute,java,encoding,Java,Encoding,我有一个txt文件。我不确定这个文件的编码。可能是EBCDIC。我对乌姆劳特有意见(äöü,ÜÄÖ) 例如 例如: 显示:M恩钦 应该是:门钦 测试文件的Url: 不幸的是,如果不知道最初创建文件时使用了什么,就无法确定检测编码的方法。我将向您介绍这一点,它有很多建议,可以让您智能地猜测编码到底是什么 一旦你知道了编码(这是最困难的部分),它就简单了。例如,如果编码为UTF-8,请将UTF-8字符集与您的: 通常,支持的字符集包括: ISO_8859_1 美国ASCII码 UTF_16 UT

我有一个txt文件。我不确定这个文件的编码。可能是EBCDIC。我对乌姆劳特有意见(äöü,ÜÄÖ) 例如 例如: 显示:M恩钦 应该是:门钦 测试文件的Url:


不幸的是,如果不知道最初创建文件时使用了什么,就无法确定检测编码的方法。我将向您介绍这一点,它有很多建议,可以让您智能地猜测编码到底是什么

一旦你知道了编码(这是最困难的部分),它就简单了。例如,如果编码为UTF-8,请将UTF-8字符集与您的:

通常,支持的字符集包括:

  • ISO_8859_1
  • 美国ASCII码
  • UTF_16
  • UTF_16BE
  • UTF_16LE
  • UTF_8

尝试使用正确的编码并使用UTF8设置BufferReader。基本上,您需要找到编码。我怀疑它是EBCDIC,或者它会比现在更坏。我建议你找出更多关于文件产生原因的信息,并利用这些信息尝试找出编码。
文件
说:“Downloads/test.txt:UTF-8 Unicode(带BOM)文本,没有行终止符”,因此@vs97的答案应该有效。只有当它实际上是UTF-8时才有帮助。OP说他们不知道编码是什么。(而
Files.newbufferedeader
将是执行上述操作的更简单方法,因为默认情况下使用UTF-8。)问题在于字符是UTF-8。可能是双重编码,所以需要两次解码。
java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream("/Downloads/test.txt")));

//        BufferedReader in = new BufferedReader(
//                new InputStreamReader(
//                        new FileInputStream("/Downloads/test.txt"), Charset.forName("windows-1252")));
        String str;
        while ((str = in.readLine()) != null) {
            System.out.println(str);
        }
    }
}
BufferedReader in = new BufferedReader(
                new InputStreamReader(
                        new FileInputStream("/Downloads/test.txt"), StandardCharsets.UTF_8));