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

Windows PowerShell执行java -jar时非ASCII字符显示乱码的解决方法

问题

在Windows PowerShell环境中执行java -jar x.jar命令时,非ASCII字符无法正常显示。从ls命令输出可见文件名“Simplified Chinese 简体中文.txt”显示正常,但运行依赖Lombok和logback-classic:1.5.8的JAR包(源码仅通过log.info输出简体中文)时,日志中的简体中文显示为乱码“绠€浣撲腑鏂?”。

执行命令及输出如下:

PS D:\> cd "D:\IdeaProjects\demos"
PS D:\IdeaProjects\demos> ls


    目录: D:\IdeaProjects\demos


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2024/9/29     13:24                .idea
d-----         2024/9/29     13:21                src
d-----         2024/9/29     13:24                target
-a----         2024/9/29     13:12           2461 .gitignore
-a----         2024/9/29     13:23           2591 pom.xml
-a----         2024/9/29     13:25              0 Simplified Chinese 简体中文.txt


PS D:\IdeaProjects\demos> java -jar D:\IdeaProjects\demos\target\grabled-chars-1.0-SNAPSHOT-jar-with-dependencies.jar
SLF4J(I): Connected with provider of type [ch.qos.logback.classic.spi.LogbackServiceProvider]
13:25:49.259 [main] INFO Application -- Simplified Chinese 绠€浣撲腑鏂?

PS D:\IdeaProjects\demos>

JAR包源码如下:

@Slf4j
public class Application {
    public static void main(String[] args) throws InterruptedException {
        log.info("Simplified Chinese 简体中文");
    }
}
解决方法

1. 启动JAR时指定编码参数

直接在java -jar命令中添加编码相关的JVM参数,强制Java使用UTF-8编码输出到控制台:

java -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 -jar D:\IdeaProjects\demos\target\grabled-chars-1.0-SNAPSHOT-jar-with-dependencies.jar

这两个参数分别设置Java文件操作的默认编码和控制台输出编码,确保日志内容以UTF-8格式输出到PowerShell。

2. 配置Logback控制台输出编码

在项目的src/main/resources目录下创建或修改logback.xml配置文件,明确指定控制台输出的字符编码为UTF-8:

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -- %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 强制设置控制台输出编码 -->
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

重新打包JAR后再运行,Logback会以UTF-8编码输出日志内容,适配PowerShell的编码环境。

3. 调整PowerShell控制台编码

先检查当前PowerShell的输出编码:

[Console]::OutputEncoding

如果输出不是UTF-8,执行以下命令修改控制台输出编码为UTF-8:

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

修改后再运行java -jar命令,即可正常显示中文日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:57:12