java中Umlauts的问题

java中Umlauts的问题,java,Java,我试图通过控制台读取一些数据并将其写入文件。当来自控制台的数据具有umlaut字符时,我遇到问题。它打印出“?”而不是umlaut字符。请在下面找到我的相同代码。谁能帮帮我吗 String cmd = "cmd /C si viewproject"+ cmdLine+" --recurse --fields=indent,name --project="+name; Process p = Runtime.getRuntime().exec(cmd);

我试图通过控制台读取一些数据并将其写入文件。当来自控制台的数据具有umlaut字符时,我遇到问题。它打印出“?”而不是umlaut字符。请在下面找到我的相同代码。谁能帮帮我吗

       String cmd = "cmd /C si viewproject"+ cmdLine+" --recurse --fields=indent,name --project="+name;

        Process p = Runtime.getRuntime().exec(cmd);
        BufferedReader in = new BufferedReader(new InputStreamReader(
                p.getInputStream()));
        String line = null;

        File filename = new File(System.getProperty("java.io.tmpdir"),
                "Project" + ".tmp");

        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(filename), Charset.forName("UTF-8").newEncoder());
        while ((line = in.readLine()) != null) {

            osw.write(line);
            osw.write("\n");
        }
        osw.close();

尝试使用
cmd/U
启动cmd,并将输入读取为UTF-16LE


有关更多信息,请参阅此问题。

该过程是否确实使用UTF-8写入其数据?还要注意,在写入文件时,您使用的是平台默认字符编码-我建议使用UTF-8(通过OutputStreamWriter包装FileOutputStream而不是FileWriter)。您似乎使用Windows=>控制台不太可能使用UTF-8。您可以阅读以更好地了解控制台代码页在Windows上的工作方式。看起来是一样的,你可以在那里找到答案。@JonSkeet:我已经从FileWriter更改为OutputStreamWriter并包装FileOutputStream。当前代码页为cmd is 850。关于如何继续的任何提示???@user1688404:我们仍然不知道进程在与您交谈时试图使用什么编码,并且您还没有说您正在使用哪个字符集与OutputStreamWriter。。。我检查了chcp,它返回了活动的代码页:850。我还使用cmd/U启动cmd,然后尝试显示一个包含umlaut字符的文件。它仍然会重现一些古怪的人物