惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
A
About on SuperTechFans
博客园 - Franky
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
Last Week in AI
Last Week in AI
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
G
Google Developers Blog

青空之蓝

[青空之蓝-2023] - 色彩 | 青空之蓝 [青空之蓝-2022] - 平静 | 青空之蓝 [青空之蓝-2021] - 远望 | 青空之蓝 浅谈垃圾回收 | 青空之蓝 浅谈泛型擦除 | 青空之蓝 浅谈单点登录 | 青空之蓝 使用 Kotlin 编写 Spring 测试 | 青空之蓝 设计模式系列文章 | 青空之蓝 从零实现一个 Java 微框架 - IoC | 青空之蓝 从零实现一个 Java 微框架 - 前言 | 青空之蓝 浅谈 JVM:类加载 | 青空之蓝 浅谈 IO | 青空之蓝 浅谈并发:synchronized & ReentrantLock | 青空之蓝 浅谈并发:CAS & AQS | 青空之蓝 浅谈并发:ThreadLocal | 青空之蓝 浅谈并发:三大特性 | 青空之蓝 浅谈组合注解 & 注解别名 | 青空之蓝 [青空之蓝-2020]-迷茫 | 青空之蓝 Java 系列文章 | 青空之蓝 HTTP 系列文章 | 青空之蓝 浅谈 EatWhatYouKill | 青空之蓝 浅谈可扩展线程池 | 青空之蓝 聊聊写框架 | 青空之蓝 聊聊现状-[2020-09] | 青空之蓝 浅谈并发:锁 | 青空之蓝 浅谈并发:基础 | 青空之蓝 浅谈缓存 | 青空之蓝 无须定义类,Spring 快速注入 Json 参数 | 青空之蓝 浅谈 Proxy 和 Aop | 青空之蓝 从零实现一个 PHP 微框架 - 初始化请求 | 青空之蓝
VSCode Java输出中文乱码问题解决[更新] | 青空之蓝
Otstar Lin · 2020-03-13 · via 青空之蓝

重写了下这篇文章,官方默认的配置可以正常输出中文,但是输入还是会造成乱码,经过了不少时间的尝试,终于把输入和输出乱码的问题解决了。

本文适用于 Windows,Linux 中应该不会出现这种问题。

首先先说明下此方法需要更改 VSCode Java 插件的 launcher.bat 启动文件,可能会在后续的使用中带来问题。

前言

前几天由于要写 OJ 题我又打开了尘封已久的 VSCode Java 工作区,使用过程中遇到了中文乱码的问题,照理说应该是不会出现这种问题的,因为我当初在配置 Java 环境的时候就已经解决了中文乱码的问题。然后一直懒得修,直到今天有空。

博主我原先是将 JDK 的编码和 Java 文件的编码都设置为 GBK,这样在运行的时候就不会出现中文乱码的问题,不知从那个版本开始这种方式就不可行了,于是只能重新的测试。

方案

首先,先创建一个项目,然后创建一个 Java 文件用于测试,注意:该文件的编码应使用 UTF-8,上传到 Linux 也方便,不用再批量改编码。

import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        System.out.println("start-1");
        System.out.println("中文");
        System.out.println("start-2");
        System.out.println(in.nextLine());
        System.out.println("end");
        in.close();
    }
}
import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        System.out.println("start-1");
        System.out.println("中文");
        System.out.println("start-2");
        System.out.println(in.nextLine());
        System.out.println("end");
        in.close();
    }
}

然后创建一个 launch.json 的启动文件,操作方法如下:

正常情况下 VSCode 会自动生成一个可用的 launch.json 文件,直接使用此配置可以正常输出中文,但是无法正常输入中文,如下:

此时,我们将修改下 launch.json 的配置,增加 "encoding": "GBK" 字段,如下:

{
  // 使用 IntelliSense 了解相关属性。
  // 悬停以查看现有属性的描述。
  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "java",
      "name": "Debug (Launch) - Current File",
      "request": "launch",
      "mainClass": "${file}",
      // 新增 encoding
      "encoding": "GBK"
    },
    {
      "type": "java",
      "name": "Debug (Launch)-App<Encoding>",
      "request": "launch",
      "mainClass": "App",
      "projectName": "Encoding",
      // 新增 encoding
      "encoding": "GBK"
    }
  ]
}
{
  // 使用 IntelliSense 了解相关属性。
  // 悬停以查看现有属性的描述。
  // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "java",
      "name": "Debug (Launch) - Current File",
      "request": "launch",
      "mainClass": "${file}",
      // 新增 encoding
      "encoding": "GBK"
    },
    {
      "type": "java",
      "name": "Debug (Launch)-App<Encoding>",
      "request": "launch",
      "mainClass": "App",
      "projectName": "Encoding",
      // 新增 encoding
      "encoding": "GBK"
    }
  ]
}

此时再运行你会发现,输入和输出都不行了,此时不要担心,请接着进行以下配置即可。

下一步就需要修改 launcher.bat 文件了,请在修改前备份下该文件。launcher.bat 位于 VSCode Java 插件目录下的 scripts 目录,也可以按住 Ctrl 然后点击之前启动时 VSCode 的启动脚本的 launcher.bat 直接跳转到该文件。

打开该文件后将 @chcp.com 65001 > NUL 修改成 @chcp.com 936 > NUL

然后再次运行,你就可以看到输出和输入都正常了

结语

现在已经我不写需要用 Scanner 的项目了(其实是不用写 OJ 题了)不过看到该文章有挺多人浏览的,大家都遇到了这个问题,之前写的确实比较水,并没有解决输入乱码的问题,这次更新了下,希望此篇能帮助到其他同学。

VSCode Java输出中文乱码问题解决[更新]

https://blog.ixk.me/post/vscode-java-output-chinese-garbled-problem-solving
  • 许可协议

    BY-NC-SA

  • 本文作者

    Otstar Lin

  • 发布于

    2020/03/13

转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!

告别 Windows 终端的难看难用,打造好用的 PowerShell浅谈浏览器渲染