新版本 IDEA 如何处理控制台中文输出乱码的问题?

2022-06-19 23:51:50 +08:00
 Richard14

按默认配置安装了最新的 idea 社区版,创建了新项目,并创建了 hello world 文件( src/Main.java )只有这一个文件。按 Ctrl+Shift+F10 单文件编译执行正常输出 hello world ,但如果替换为中文则会显示乱码。

目前做了的工作:在 Settings 里把 File Encodings 相关全部调成了 utf-8,以及把 idea 目录下的 idea64.exe.vmoptions ,修改为结尾添加了

-Dfile:econding=UTF-8
-Dconsole.encoding=UTF-8

经过以上两点修改后乱码问题仍无改善,请问应该怎么设置呢?网上资料大部分是旧版 idea 的,新版里不太适用

5217 次点击
所在节点    Java
39 条回复
SMGdcAt4kPPQ
2022-06-19 23:56:58 +08:00
运行选项勾上 external console
同时 Windows 默认终端设置为 Windows Terminal
CEBBCAT
2022-06-19 23:56:59 +08:00
其实编码问题无非就是输入输出。

代码用什么编码输出的,用对应的编码解码,自然可以得到正确的结果。

建议楼主用 iconv 、od 、echo 、base64 等工具对 stdin/stdout 进行调试。

上面提的那些工具如果不会用的话,建议检查 .java 文件编码、IntelliJ IDEA 终端编码
Bingchunmoli
2022-06-20 00:02:01 +08:00
设置-》 编辑器》里面有文件编码,最好设置 UTF-8 windows 默认 GBK 和 ISO-8859-1 终端默认 GBK
Bingchunmoli
2022-06-20 00:02:59 +08:00
通常 windows 默认 GBK 如果修改 UTF-8 需要修改注册表。一般是不懂终端,但是正常不乱吗。
SMGdcAt4kPPQ
2022-06-20 00:04:16 +08:00
@Bingchunmoli Windows 修改全局 UTF-8 会导致部分软件乱码,不建议也没必要这样做
Richard14
2022-06-20 00:25:04 +08:00
@ComputerIdiot 运行选项具体指什么,我在 Run/Debug Configuration 里没有找到 external console 的选项。windows 默认终端是指修改 windows 设置,还是指修改 idea 的关联设置。如果是前者难道我需要额外安装一个 terminal 才能用,我记得这个软件不是 win 默认预装的
SMGdcAt4kPPQ
2022-06-20 00:41:22 +08:00
@Richard14 我一直用的 Rider 没发现 IDEA 是没有 external console 这个选项的
Windows 默认终端是 Win11 的新设置,可以用 Windows Terminal 代替原来的 conhost ,conhost 可以输出中文但不能输出 emoji ,换成 Windows Terminal 就可以了
SMGdcAt4kPPQ
2022-06-20 00:42:38 +08:00
首先得测试一下不用 IDEA 的控制台运行是否乱码,如果不乱码就是 IDEA 的问题
SMGdcAt4kPPQ
2022-06-20 00:50:38 +08:00
在 C#里我只需要加上
Console.OutputEncoding = Encoding.UTF8;
Console.InputEncoding = Encoding.UTF8;
就可以正常从 Windows Terminal 输入输出 Emoji ,Java 怎么做都只能输出中文不能输出 Emoji ,可能是 Java 内部没有使用 WriteConsoleW 这个 API
geying
2022-06-20 03:31:34 +08:00
查看下文件编码,上次项目也遇到过 (有个地方设置选择 utf-8 或 other)
虽然编辑器中午是正常 但是命令行是乱码
linweizhi
2022-06-20 05:07:20 +08:00
试一下添加一个环境变量?
JAVA_TOOL_OPTIONS = -Duser.language=en
arch9999
2022-06-20 05:18:34 +08:00
Richard14
2022-06-20 06:15:36 +08:00
@linweizhi 试了试没有效果

@arch9999 看起来需要更改系统本身的编码?感觉不太对,另外我也担心其他程序 bug ,不想进行类似修改。

目前是测试了一下 powershell 里 echo"你好世界"这类的是会正常显示的,应该是 gbk 编码之类的。希望达到的效果是文件以 utf8 编码,sout 主要是打印状态,开发测试过程中使用,能显示中英文就可以满足,倒也不必覆盖完整 utf8 。第一次用 idea ,如果 idea 依赖于系统的控制台输出而没有其他解决办法的话感觉有点 low 啊,难道我必须把 shell 也调成 utf8 。。
arch9999
2022-06-20 06:25:46 +08:00
@Richard14 #13

```
> $OutputEncoding

Preamble :
BodyName : utf-8
EncodingName : Unicode (UTF-8)
HeaderName : utf-8
WebName : utf-8
WindowsCodePage : 1200
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
IsSingleByte : False
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 65001
```
Richard14
2022-06-20 07:30:18 +08:00
@arch9999

PS C:\WINDOWS\system32> $OutputEncoding


IsSingleByte : True
BodyName : us-ascii
EncodingName : US-ASCII
HeaderName : us-ascii
WebName : us-ascii
WindowsCodePage : 1252
IsBrowserDisplay : False
IsBrowserSave : False
IsMailNewsDisplay : True
IsMailNewsSave : True
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : True
CodePage : 20127
arch9999
2022-06-20 08:14:03 +08:00
SMGdcAt4kPPQ
2022-06-20 08:28:16 +08:00
PowerShell 一直都能正常输入输出 Unicode 字符
需要测试的是运行 java YourClass 能否正常输出
nnegier
2022-06-20 09:49:24 +08:00
我用 Clion 一样的问题,貌似处理方法还和 Intellj IDEA 不一样,还没解决,按理说编码问题就是输入和输出的字符编码集不一样导致的
SMGdcAt4kPPQ
2022-06-20 11:39:39 +08:00
@nnegier MS 的 C Runtime 调用的不是 Unicode 版本的 Windows API ,需要自己调用 WriteConsoleW
kamal
2022-06-20 13:06:12 +08:00
指定字体试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/860741

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX