[英]How can I change the Standard Out to "UTF-8" in Java
我使用 Java 程序從網站下載文件,標題如下所示
Content-Disposition attachment;filename="Textkürzung.asc";
沒有指定編碼
我所做的是下載后將文件名傳遞給另一個應用程序以進行進一步處理。 我用
System.out.println(filename);
在標准輸出中,字符串被打印為Textk³rzung.asc
如何在 Java 中將標准輸出更改為“UTF-8”?
我嘗試編碼為“UTF-8”,內容還是一樣
更新:
我能夠在沒有任何代碼更改的情況下解決這個問題。 在我從其他應用程序調用它的 jar 文件的地方,我執行了以下操作
java -DFile.Encoding=UTF-8 -jar ....
這似乎解決了這個問題
謝謝大家的支持
您看到的結果表明您的控制台希望文本使用Windows“代碼頁850”編碼-字符ü具有Unicode代碼點U + 00FC。 字節值0xFC在Windows代碼頁850中呈現為³。 因此,如果您希望該名稱正確顯示在控制台上,則需要使用“ Cp850”編碼進行打印:
PrintWriter consoleOut = new PrintWriter(new OutputStreamWriter(System.out, "Cp850"));
consoleOut.println(filename);
這是否是您的“其他應用程序”所期望的是另一個問題-如果其他應用程序也正在讀取其標准輸入為Cp850,則它將僅看到正確的名稱。
System.out
的默認編碼是操作系統默認值。 在國際版本的Windows上,這通常是Windows-1252代碼頁。 如果您在命令行上運行代碼,這也是終端所期望的編碼,那么特殊字符將正確顯示。 但是,如果您以其他方式運行代碼,或將輸出發送到文件或其他程序,則可能期望使用不同的編碼。 對於您而言,顯然是UTF-8。
實際上,您可以通過替換System.out
來更改其編碼:
try {
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out), true, "UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new InternalError("VM does not support mandatory encoding UTF-8");
}
這適用於無法使用新PrintStream
情況,例如,因為輸出來自無法更改的庫代碼,無法控制系統屬性,或者無法更改所有文件的默認編碼的情況適當。
嘗試使用:
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(test);
在嘗試其他答案后,你的問題的這個答案https://stackoverflow.com/a/42957623/11628646對我來說就像一個魅力
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.