V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
winffee
V2EX  ›  Visual Studio Code

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

  •  
  •   winffee · 2021-12-17 13:37:43 +08:00 · 1761 次点击
    这是一个创建于 1105 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,欢迎来到 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:Couldnot find or load main classHello
    
    • 带有 Unicode 字符的字符串文字在打印到终端时会出现乱码。

      Exercises
      
      ├──练习.class
      
      └──练习.java
      

      C:\Test\>java -cp ./Exercises 练习
    
      Error:Couldnot find or load main class??
    
      Causedby: java.lang.ClassNotFoundException:??
    
    • Java 程序与终端交互 I/O 时出现乱码

      publicclassHello{
      
      	publicstaticvoid main(String[] args){
      
      		System.out.println("你好!");
      
      	}
      
      }
      

      C:\Test\>chcp
    
      65001
    
      C:\Test\>java -cp ./ExercisesHello
    
      ??!
    
      C:\Test\>java -Dfile.encoding=UTF-8-cp ./ExercisesHello
    
      你好!
    
    • 程序需要从 stdin 读取 Unicode 字符,并将 Unicode 字符打印到 stdout 。

      import java.util.Scanner;
      
      publicclassHello{
      
        publicstaticvoid main(String[] args){
      
        	Scanner scanner =newScanner(System.in);
      
      		System.out.println(scanner.nextLine());
         }
      
      }
      

      C:\Test\>chcp
    
      65001
    
      C:\Test\>java -Dfile.encoding=UTF-8-cp ./ExercisesHello
    
      你好
    
      ��
    

    我们的发现与应对此类问题的建议

    之前,为了缓解编码问题,我们在 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 的相关信息

    2 条回复    2021-12-17 14:26:19 +08:00
    billly
        1
    billly  
       2021-12-17 14:09:10 +08:00
    支持!
    zhangxh1023
        2
    zhangxh1023  
       2021-12-17 14:26:19 +08:00
    资瓷!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:37 · PVG 22:37 · LAX 06:37 · JFK 09:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.