2013-01-16 53 views
4

我想通過控制檯讀取一些數據並將其寫入文件。當控制檯中的數據具有元音變音字符時,我遇到了問題。它打印出'?'而不是變音符號。請在下面找到我的代碼。有人可以幫我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(); 
+5

該過程是否明確使用UTF-8編寫其數據?另外請注意,在寫入文件時,您使用的是平臺默認字符編碼 - 我建議使用UTF-8(通過OutputStreamWriter封裝FileOutputStream而不是FileWriter) –

+1

您似乎使用Windows =>控制檯不太可能正在使用UTF-8。你可以閱讀[這篇文章](http://stackoverflow.com/questions/13348811/get-list-of-processes-on-windows-in-a-charset-safe-way),以更好地瞭解如何控制檯代碼頁在Windows上工作。 – assylias

+1

[此問題](http://stackoverflow.com/questions/3862320/failing-to-write-german-umlauts-aou-from-console-to-text-file-with-java)似乎是相同的,你可能會在那裏找到答案。 – Matt

回答

2

開始嘗試用CMD和cmd /U讀取輸入爲UTF-16LE。

查看此問題What encoding/code page is cmd.exe using?瞭解更多信息。

+0

很好的信息! – fge

+0

我檢查了chcp,它返回活動代碼頁:850.我還用cmd/U啓動了cmd,然後顯示帶有元音變音字符的文件。它仍然會回覆一些奇怪的角色 – user1688404