微軟整理並公佈了 2021年11月 VSCode 中 Java 基礎開發相關的最新功能,以及與應對編碼問題的一些解決策略:
專案管理 – 棄用「.project」等後設資料檔案
匯入新的 Java 專案時,Visual Studio Code 不再在專案路徑中生成那些隱藏的「.project」後設資料檔案!這是一個已經存在三年多的問題,而 VSCode 在 11月的 1.6.3 版本中修復了它。關於此功能的實現技術可檢視。
測試 – 在測試與測試物件之間跳轉
在 11 月的版本中,VSCode 新增了一項新功能,允許使用者在測試和相應的測試物件之間跳轉,這個功能將幫助使用者更方便地編寫單元測試:
- 程式碼操作 – 更方便地生成建構函式和覆蓋/實現方法
微軟之前的中提到過,會一直致力讓常見程式碼的操作更加易於使用。在最新版本中,使用者現在可以使用 Java 類旁邊的「燈泡圖示」來方便地生成建構函式或覆蓋/實現方法!以下是一個快速演示:
- 亂碼問題
背景
使用者在處理各種語言時遇到某種編碼問題是很常見的,計算機只能理解 0 和 1 等二進位制資料,它使用字元集將資料編碼/解碼為現實世界的字元。兩個程序在進行I/O互動時,必須使用相容的字元集進行編碼和解碼,否則可能會出現亂碼。MacOS 和 Linux 一般都使用 UTF-8,因此編碼對它們來說不是問題。但是,對於 Windows,預設字元集不是 UTF-8 並且是平臺相關的,這會導致不同工具之間的編碼不一致。
常見問題
以下是在 Windows 終端上執行 Java 程式時的典型編碼問題。
- 檔案或目錄名包含Unicode字元,Java啟動器找不到對應的類路徑或主類。
中文目錄 ├── Hello.class └── Hello.java
C:\Test>java -cp 中文目錄 Hello Error: Could not find or load main class Hello
- 帶有 Unicode 字元的字串文字在列印到終端時會出現亂碼。
Exercises ├── 練習.class └── 練習.java
C:\Test>java -cp ./Exercises 練習 Error: Could not find or load main class ?? Caused by: java.lang.ClassNotFoundException: ??
- Java程式與終端互動I/O時出現亂碼
public class Hello { public static void main(String[] args) { System.out.println("你好!"); } }
C:\Test>chcp 65001 C:\Test>java -cp ./Exercises Hello ??! C:\Test>java -Dfile.encoding=UTF-8 -cp ./Exercises Hello 你好!
- 程式需要從 stdin 讀取 Unicode 字元,並將 Unicode 字元列印到 stdout。
import java.util.Scanner; public class Hello { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println(scanner.nextLine()); } }
C:\Test>chcp 65001
C:\Test>java -Dfile.encoding=UTF-8 -cp ./Exercises Hello 你好 ��
之前,為了緩解編碼問題,VSCode 在 Java Debugger 端新增了一些解決方法去強制在工具鏈中使用 UTF-8。例如,新增一個launcher.bat 強制終端的內碼錶為65001 ,並將預設的「file.encoding」屬性設定為「UTF-8」。但事實證明,它們並沒有系統地解決編碼問題,並且還引入了一些額外的副作用(參見, , )。
而事實上,使用者只需要將 windows 系統區域設定為他們想要的語言,然後 JVM 和終端將自動更改為與使用者的系統區域設定相容的編碼。官方 Java 檔案 ()也建議這樣做。
以下螢幕截圖顯示瞭如何在 Windows 中更改系統區域設定。例如,如果你想使用終端在 Java 程式中輸入漢字,就可以將 Windows 系統區域設定為中文。預設的 Java 字元集將是」GBK」並且 cmd 內碼錶將是」936″ ,就可以很好地支援中文字元。
這是有關如何處理編碼問題的。