You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java字符显示异常求助:含特殊字符的用户名输入输出异常

Windows终端(Git Bash/PowerShell)下Java UTF-8输入输出乱码解决方法

在Windows的Git Bash和PowerShell中运行Java程序获取用户名输入时,带特殊字符(如João中的õ)的内容无法正常显示。尝试过以下操作但未解决:

  • 给Scanner指定UTF-8编码,输出显示Jo?o
  • 运行前执行chcp 65001切换代码页,输出变为Joo
  • 重定向System.out到UTF-8的PrintStream,输出出现乱码Jo´┐¢o

核心解决思路

要解决这个问题,需要同时保证三个环节的编码统一为UTF-8:

  1. Java程序的输入编码(Scanner读取控制台输入)
  2. Java程序的输出编码(System.out输出到控制台)
  3. Windows终端的编码和字体支持

正确代码实现

以下代码同时配置输入和输出的UTF-8编码,确保字符读取和输出都正确:

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

public class UserInputFix {
    public static void main(String[] args) {
        // 强制Scanner使用UTF-8读取输入
        Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8);
        
        try {
            // 重置System.out为UTF-8编码的打印流,开启自动刷新
            System.setOut(new PrintStream(
                new FileOutputStream(FileDescriptor.out),
                true,
                StandardCharsets.UTF_8.name()
            ));
            
            System.out.print("请输入你的名字:");
            String name = scanner.nextLine();
            
            System.out.println("你好," + name);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            scanner.close();
        }
    }
}

终端环境配置

PowerShell配置步骤

  1. 打开PowerShell,执行命令切换到UTF-8代码页:
    chcp 65001
    
  2. 检查终端字体是否支持UTF-8:右键终端标题栏 → 属性 → 字体,选择Consolas、微软雅黑等支持特殊字符的字体
  3. 编译并运行Java程序时,添加JVM参数强制使用UTF-8编码:
    javac UserInputFix.java
    java -Dfile.encoding=UTF-8 UserInputFix
    

Git Bash配置步骤

  1. 检查当前编码设置,执行命令:
    echo $LANG
    
    若输出不是zh_CN.UTF-8或en_US.UTF-8,则修改~/.bashrc文件,添加:
    export LANG=zh_CN.UTF-8
    
    保存后重启Git Bash生效
  2. 编译运行程序时同样添加JVM参数:
    javac UserInputFix.java
    java -Dfile.encoding=UTF-8 UserInputFix
    

为什么之前的尝试失败?

  • 仅设置Scanner的UTF-8编码,但System.out仍使用终端默认编码(如GBK)输出,导致字符转码错误
  • 仅执行chcp 65001但未同步设置JVM的默认编码,JVM仍用系统默认编码处理输入输出
  • 第二次修改代码时未指定Scanner的输入编码,输入的õ已被错误解码,后续输出自然乱码

内容的提问来源于stack exchange,提问作者losdekai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 05:45:04