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
相关产品推荐
相关产品推荐

