我想通過控制檯讀取一些數據並將其寫入文件。當控制檯中的數據具有元音變音字符時,我遇到了問題。它打印出'?'而不是變音符號。請在下面找到我的代碼。有人可以幫我Java中的變音問題
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。你可以閱讀[這篇文章](http://stackoverflow.com/questions/13348811/get-list-of-processes-on-windows-in-a-charset-safe-way),以更好地瞭解如何控制檯代碼頁在Windows上工作。 – assylias
[此問題](http://stackoverflow.com/questions/3862320/failing-to-write-german-umlauts-aou-from-console-to-text-file-with-java)似乎是相同的,你可能會在那裏找到答案。 – Matt