按默认配置安装了最新的 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 的,新版里不太适用
1
SMGdcAt4kPPQ 2022-06-19 23:56:58 +08:00 via Android
运行选项勾上 external console
同时 Windows 默认终端设置为 Windows Terminal |
2
CEBBCAT 2022-06-19 23:56:59 +08:00 via iPhone
其实编码问题无非就是输入输出。
代码用什么编码输出的,用对应的编码解码,自然可以得到正确的结果。 建议楼主用 iconv 、od 、echo 、base64 等工具对 stdin/stdout 进行调试。 上面提的那些工具如果不会用的话,建议检查 .java 文件编码、IntelliJ IDEA 终端编码 |
3
Bingchunmoli 2022-06-20 00:02:01 +08:00
设置-》 编辑器》里面有文件编码,最好设置 UTF-8 windows 默认 GBK 和 ISO-8859-1 终端默认 GBK
|
4
Bingchunmoli 2022-06-20 00:02:59 +08:00
通常 windows 默认 GBK 如果修改 UTF-8 需要修改注册表。一般是不懂终端,但是正常不乱吗。
|
5
SMGdcAt4kPPQ 2022-06-20 00:04:16 +08:00 via Android
@Bingchunmoli Windows 修改全局 UTF-8 会导致部分软件乱码,不建议也没必要这样做
|
6
Richard14 OP @ComputerIdiot 运行选项具体指什么,我在 Run/Debug Configuration 里没有找到 external console 的选项。windows 默认终端是指修改 windows 设置,还是指修改 idea 的关联设置。如果是前者难道我需要额外安装一个 terminal 才能用,我记得这个软件不是 win 默认预装的
|
7
SMGdcAt4kPPQ 2022-06-20 00:41:22 +08:00 via Android
@Richard14 我一直用的 Rider 没发现 IDEA 是没有 external console 这个选项的
Windows 默认终端是 Win11 的新设置,可以用 Windows Terminal 代替原来的 conhost ,conhost 可以输出中文但不能输出 emoji ,换成 Windows Terminal 就可以了 |
8
SMGdcAt4kPPQ 2022-06-20 00:42:38 +08:00 via Android
首先得测试一下不用 IDEA 的控制台运行是否乱码,如果不乱码就是 IDEA 的问题
|
9
SMGdcAt4kPPQ 2022-06-20 00:50:38 +08:00 via Android
在 C#里我只需要加上
Console.OutputEncoding = Encoding.UTF8; Console.InputEncoding = Encoding.UTF8; 就可以正常从 Windows Terminal 输入输出 Emoji ,Java 怎么做都只能输出中文不能输出 Emoji ,可能是 Java 内部没有使用 WriteConsoleW 这个 API |
10
geying 2022-06-20 03:31:34 +08:00
查看下文件编码,上次项目也遇到过 (有个地方设置选择 utf-8 或 other)
虽然编辑器中午是正常 但是命令行是乱码 |
11
linweizhi 2022-06-20 05:07:20 +08:00
试一下添加一个环境变量?
JAVA_TOOL_OPTIONS = -Duser.language=en |
12
arch9999 2022-06-20 05:18:34 +08:00
|
13
Richard14 OP |
14
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 ``` |
15
Richard14 OP @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 |
16
arch9999 2022-06-20 08:14:03 +08:00
|
17
SMGdcAt4kPPQ 2022-06-20 08:28:16 +08:00 via Android
PowerShell 一直都能正常输入输出 Unicode 字符
需要测试的是运行 java YourClass 能否正常输出 |
18
nnegier 2022-06-20 09:49:24 +08:00
我用 Clion 一样的问题,貌似处理方法还和 Intellj IDEA 不一样,还没解决,按理说编码问题就是输入和输出的字符编码集不一样导致的
|
19
SMGdcAt4kPPQ 2022-06-20 11:39:39 +08:00 via Android
@nnegier MS 的 C Runtime 调用的不是 Unicode 版本的 Windows API ,需要自己调用 WriteConsoleW
|
20
kamal 2022-06-20 13:06:12 +08:00
指定字体试试
|
21
mmdsun 2022-06-20 13:42:36 +08:00
没用过社区版,最新旗舰版 idea 没有这个问题,莫非系统改过什么设置?
|
22
leeyuzhe 2022-06-20 14:29:34 +08:00
idea64.exe.vmoptions 管用的,你是不是改错文件了,你不要自己找,直接点“帮助” -》“编辑自定义 vm 选项”
|
23
cubecube 2022-06-20 15:15:31 +08:00
换个中文字体试试,之前出过问题发现是某些字体无法显示中文
|
24
Bingchunmoli 2022-06-20 15:37:04 +08:00
@ComputerIdiot 是的,但是也是老软件,全局 UTF-8 其实有助于编码统一,但无助于 windows 的老旧生态
|
25
Richard14 OP |
26
leeyuzhe 2022-06-21 10:14:02 +08:00
我说那个位置 100% 会在启动时加载的,在那改准没错。
然后把你的乱码复制一段贴出来 |
28
mxjump 2022-06-21 13:00:46 +08:00
@Richard14 楼主我 3 、4 个月前用 tomcat 也是控制台乱码,跟着这个帖子弄好的,你看看有没有用
百度搜“解决 IntelliJ IDEA 中 tomcat 控制台中文乱码问题”,csdn 的帖子,作者 Dragon~Snow 。。。。刚注册,发不了链接,,希望里面的办法能帮到楼主 |
30
leeyuzhe 2022-06-21 13:38:56 +08:00 1
@Richard14 你这方向找错了,你这种都是问号的乱码是以 utf8 的方式读取 gbk 编码的中文。所以你这个乱码不是 idea 的问题也不是 idea console 的问题,而是你的 java 程序输出了乱码。你点一下右上角调试运行那里那个“main”,然后编辑
然后添加运行时的 vm 参数-Dfile.encoding=UTF-8 |
31
leeyuzhe 2022-06-21 13:41:48 +08:00 2
刚发现你的 File Encodings 一直写错了,注意是 file.encoding ,你一直写成了 file:encoding!
|
32
litchinn 2022-06-21 16:53:33 +08:00 1
看到你的控制台用的是 jdk18 ,这个应该是 jdk18 的问题,https://bugs.eclipse.org/bugs/show_bug.cgi?id=579383
在 jdk18 的这个问题(具体原因不明)有结果之前,换成 GBK 或者更换成其他版本 jdk 可以解决 |
33
SMGdcAt4kPPQ 2022-06-21 18:04:59 +08:00
@litchinn 之前用 JDK18 EA 的时候就遇到了这个问题,没想到 GA 了还没修
不能输出 Emoji 的问题有人反馈过吗? |
34
SMGdcAt4kPPQ 2022-06-21 18:59:30 +08:00
@nnegier 刚刚试了一下 Rust ,在 Windows Terminal 里运行能正确输出 Emoji ,在 CLion 和 conhost 能正确输出部分 Emoji ,中文当然都没问题
|
35
gumayusi 2022-06-21 22:14:29 +08:00 1
我猜测一下,既然 OP 安装 IDEA 都要最新版,那想必 JDK 版本也是最新的。百度"IDEA Java18 中文",找到了一篇 CSDN 的博文,标题是"解决 jdk18 下 IntelliJ IDEA2021.3 中文乱码问题"。点进去看了一下,发现 IDEA 和 Java18 有兼容性问题。我用虚拟机里的全新 Windows11 测试了一下,安装全新的 IDEA+JDK17+JDK18 ,如果新建项目时使用 JDK17 ,中文就能正常显示,如果使用 JDK18 ,中文就会乱码(而且就是 OP 截图中菱形问号式的乱码),问题解决(*^_^*)。另外,Java18 默认编码改为 UTF-8 了,可能 IDEA 之前的代码兼容不了所以中文显示乱码,以后的版本应该会修复吧。
|
36
SMGdcAt4kPPQ 2022-06-22 00:10:58 +08:00 via Android
@ComputerIdiot 之前用 JDK18 的时候也是乱码,但是换 Kotlin ,同样也是 JDK18 ,就不乱码
|
38
goalidea 2022-07-13 15:47:11 +08:00
这是提醒你需要付费上 ultimate 版🤪
|
39
spe 2022-09-03 00:23:50 +08:00
搞了 2 小时,无数个方法,终于找到了,还真是 jdk18 的问题
|