11月 VS Code 的 Java 新功能和编码策略
微软整理并公布了 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”。但事实证明,它们并没有系统地解决编码问题,并且还引入了一些额外的副作用(参见#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″ ,就可以很好地支持中文字符。
这是有关如何处理编码问题的详细文档。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Fedora 和 Debian 将获得 AMD ROCm 支持
AMD 的 ROCm 是面向 GPU 计算的开放式软件平台,专为提供出色灵活性和卓越性能而构建,让高性能计算和人工智能社区能够借助各种开源计算语言、编译器、库和工具来加快代码开发,从而解决当今世界所面临的艰巨挑战。 ROCm 的主要竞争对手就是英伟达所推出的 CUDA,其主要特点包括: 加速式计算 开源 支持多平台 集成高性能计算和机器学习框架 支持容器 开放式编程模型 AMD 此前只在 SUSE、RHEL/CentOS 和 Ubuntu LTS 上提供了由官方带来的 ROCm 支持。虽然其他的 Linux 发行版并没有获得 AMD 的官方支持,但像 Arch Linux 这样的发行版是可以通过其第三方软件包轻松快速地进行部署。不过这毕竟是少数,像 Fedora 和 Debian 这样的发行版就没这么幸运了。 好消息是,如今 AMD ROCm 也引起了 Fedora 和 Debian 开发者们的密切关注,以便 ROCm 在未来能够更容易地在这些发行版上进行部署。 Debian 目前已经在将 ROCm 打包成他们发行版的一部分方面取得了不错的进展。与此同时,Debian 的软件包又可以流...
- 下一篇
揭秘:越来越多人关停5G网络,到底是因为什么原因呢?
你的手机套餐升级5G了吗?你觉得5G惠民吗? 就在前不久,人民日报点名批评中国移动隐藏扣费现象:涉及金额小,维权成本高。网友纷纷表示大快人心啊!正因为这一举动,就意味着套餐乱象将要开始整治了。 不知道大家有没有经历过,某些通信公司打过来的电话?在通话中,对方的目的想让你升级套餐,相信大多数人都有这样的经历,并且或多或少都有人中过招,一不小心就升级了套餐。 这些运营商用的是什么手段,让人们不知不觉中就上当了呢?在大肆宣传5G技术的情况下,却依旧少人问津,这是为什么呢? 如果你接到过这样的电话,说到可以为我们免费升级5G套餐,前两个月是可以免费的。如果你贪图这两个月的免费且同意升级,那么,你完蛋了! 免费试用期过后,你可能就会发现手机余额不足,于是查看下每月的扣费标准,竟从原来的几十块变成了上百块,且无法修改回原来的套餐服务!此时,中招的人们估计感叹着真不应该贪图那一丁点便宜~ 除此之外,大家用过无限流量卡、APP专属流量卡吗?其实这里面也是有套路的,只要稍微超出了套餐的范围就会立马扣费,这种现象不仅仅是存在于中国移动,其他两大运营商也存在这方面的问题,只不过中国移动显得尤为突出罢了。 数...
相关文章
文章评论
共有0条评论来说两句吧...