【问题标题】:Problems with Umlauts in java [duplicate]java中的元音变音问题[重复]
【发布时间】:2013-01-16 12:13:16
【问题描述】:

我正在尝试通过控制台读取一些数据并将其写入文件。当来自控制台的数据包含变音字符时,我遇到了问题。它打印出'?而不是变音符号。请在下面找到我的代码。有人可以帮我吗

       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();

【问题讨论】:

  • 进程是否肯定使用UTF-8来写入数据?另请注意,您在写入文件时使用的是平台默认字符编码 - 我建议使用 UTF-8(通过 OutputStreamWriter 包装 FileOutputStream 而不是 FileWriter)
  • 您似乎使用的是 Windows => 控制台不太可能使用 UTF-8。您可以阅读this post 以更好地了解控制台代码页在 Windows 上的工作方式。
  • This problem 似乎是一样的,你可以在那里找到答案。
  • @JonSkeet:我已从 FileWriter 更改为 OutputStreamWriter 并包装了 FileOutputStream。活动代码页是 cmd 是 850。关于如何继续的任何指针??
  • @user1688404:好吧,我们仍然不知道进程在与您交谈时尝试使用什么编码,而且您还没有说明您使用的是哪个字符集与 OutputStreamWriter... 或确实你是如何阅读文件的。

标签: java


【解决方案1】:

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

有关更多信息,请参阅此问题What encoding/code page is cmd.exe using?

【讨论】:

  • 我检查了 chcp,它返回 Active Codepage: 850。我还使用 cmd /U 启动了 cmd,然后尝试显示其中包含元音变音字符的文件。它仍然会重新调整一些奇怪的字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多