Java on Visual Studio Code的更新 – 2021年11月

微軟技術棧發表於2021-12-18

Nick zhu
Senior Program Manager, Developer Division at Microsoft

​大家好,歡迎來到 11 月版的 Visual Studio Code Java 更新!在這篇年終部落格中,我們將分享一些與Java基礎開發相關的最新功能以及與應對編碼問題的一些解決策略。

基礎開發相關的功能會直接影響開發者的日常工作效率,提升這方面的使用者體驗將一直是我們的重點。在11 月的更新中,我們在這方面進行了多項改進:

專案管理 – 跟”.project”等後設資料檔案說再見

如果您正在使用Java擴充套件包進行 Java 開發,我們有個好訊息要告訴您 – 當您匯入新的 Java 專案時,Visual Studio Code 不再在專案路徑中生成那些隱藏的“.project”後設資料檔案!這是一個已經存在三年多的問題,而我們在11月的版本中修復了它。如果您有興趣瞭解我們是如何解決的,請可以訪問這篇部落格

測試 – 在測試與測試物件之間跳轉

在 11 月的版本中,我們新增了一項新功能,允許使用者在測試和相應的測試物件之間跳轉,這個功能將幫助使用者更方便地編寫單元測試

程式碼操作 – 更方便地生成建構函式和覆蓋/實現方法

我們曾經在之前的部落格中提到過,我們會一直致力讓常見程式碼的操作更加易於使用。在最新版本中,使用者現在可以使用 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 
你好 
��

我們的發現與應對此類問題的建議

之前,為了緩解編碼問題,我們在 Java Debugger 端新增了一些解決方法去強制在我們的工具鏈中使用 UTF-8。例如,新增一個launcher.bat 強制終端的內碼表為65001 ,並將預設的“file.encoding”屬性設定為“UTF-8”。但事實證明,它們並沒有系統地解決編碼問題,並且還引入了一些額外的副作用(參見#756, microsoft/vscode-java-debug#622, microsoft/vscode-java-debug#646)。

在對該問題進行更多調查後,我們發現我們新增的解決方法似乎沒有必要。使用者只需要將 windows 系統區域設定為他們想要的語言,然後 JVM 和終端將自動更改為與您的系統區域設定相容的編碼。官方 Java 文件 ( https://www.java.com/en/download/help/locale.html )也建議這樣做。

以下螢幕截圖顯示瞭如何在 Windows 中更改系統區域設定。例如,如果您想使用終端在Java程式中輸入漢字,您可以將Windows系統區域設定為中文。預設的 Java 字符集將是”GBK”並且 cmd 內碼表將是”936″ ,它將很好地支援中文字元。

這是有關如何處理編碼問題的詳細文件

年末結語

我們快到 2021 年底了,在過去的 12 個月裡,我們一直在努力在 Visual Studio Code 上提供更好的 Java 開發體驗。到 2022 年,Visual Studio Code 上的 Java 支援將會有更多令人興奮的事情,所以請繼續關注未來的更新。一如既往,我們感謝使用者以及社群的支援,祝大家聖誕快樂,新年快樂!

反饋與建議

請積極使用我們的產品!您的反饋和建議對我們非常重要,並將幫助我們做得更好。 有幾種方法可以給我們留下反饋

資源

以下連結和資源能幫助您更好地瞭解Java on Visual Studio Code的相關資訊

相關文章