11月 VS Code 的 Java 新功能和編碼策略

2021-12-18 09:00:07

微軟整理並公佈了 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″ ,就可以很好地支援中文字元。

這是有關如何處理編碼問題的。

展開閱讀全文