IBM ACE 12.0.6.0执行命令时出现指定字符集不支持错误求助
解决IBM ACE 12.0.6.0在Windows 10执行命令的字符集错误
问题现象
安装IBM ACE 12.0.6.0后,执行任意控制台命令(如mqsilist)时抛出字符集相关异常,核心错误为UnsupportedCharsetException: MS65001,完整错误日志如下:
C:\Program Files\IBM\ACE\12.0.6.0>mqsilist WARNING: Specified charset is not supported, UTF-8 is used for default charset Exception in thread "main" java/lang/ExceptionInInitializerError at java/lang/J9VMInternals.ensureError (J9VMInternals.java:145) at java/lang/J9VMInternals.recordInitializationFailure (J9VMInternals.java:134) at com/ibm/jvm/io/LocalizedInputStream.getInputStream (LocalizedInputStream.java:332) at java/io/InputStreamReader.<init> (InputStreamReader.java:87) at java/io/FileReader.<init> (FileReader.java:83) at sun/misc/MetaIndex.registerDirectory (MetaIndex.java:177) at sun/misc/Launcher$ExtClassLoader$1.run (Launcher.java:171) at sun/misc/Launcher$ExtClassLoader$1.run (Launcher.java:166) at java/security/AccessController.doPrivileged (AccessController.java:747) at sun/misc/Launcher$ExtClassLoader.createExtClassLoader (Launcher.java:165) at sun/misc/Launcher$ExtClassLoader.getExtClassLoader (Launcher.java:152) at sun/misc/Launcher.<init> (Launcher.java:82) at sun/misc/Launcher.<clinit> (Launcher.java:68) at java/lang/ClassLoader.initializeClassLoaders (ClassLoader.java:196) at java/lang/Thread.initialize (Thread.java:411) at java/lang/Thread.<init> (Thread.java:158) java/nio/charset/UnsupportedCharsetException: MS65001 at java/nio/charset/Charset.forName (Charset.java:579) at com/ibm/jvm/io/ConsoleInputStream.<clinit> (ConsoleInputStream.java:100) at com/ibm/jvm/io/LocalizedInputStream.getInputStream (LocalizedInputStream.java:332) at java/io/InputStreamReader.<init> (InputStreamReader.java:87) at java/io/FileReader.<init> (FileReader.java:83) at sun/misc/MetaIndex.registerDirectory (MetaIndex.java:177) at sun/misc/Launcher$ExtClassLoader$1.run (Launcher.java:171) at sun/misc/Launcher$ExtClassLoader$1.run (Launcher.java:166) at java/security/AccessController.doPrivileged (AccessController.java:747) at sun/misc/Launcher$ExtClassLoader.createExtClassLoader (Launcher.java:165) at sun/misc/Launcher$ExtClassLoader.getExtClassLoader (Launcher.java:152) at sun/misc/Launcher.<init> (Launcher.java:82) at sun/misc/Launcher.<clinit> (Launcher.java:68) at java/lang/ClassLoader.initializeClassLoaders (ClassLoader.java:196) at java/lang/Thread.initialize (Thread.java:411) at java/lang/Thread.<init> (Thread.java:158)
已检查系统编码:
PS C:\Users\Admin> [System.Text.Encoding]::Default IsSingleByte : True BodyName : iso-8859-1 EncodingName : Western European (Windows) HeaderName : Windows-1252 WebName : Windows-1252 WindowsCodePage : 1252 IsBrowserDisplay : True IsBrowserSave : True IsMailNewsDisplay : True IsMailNewsSave : True EncoderFallback : System.Text.InternalEncoderBestFitFallback DecoderFallback : System.Text.InternalDecoderBestFitFallback IsReadOnly : True CodePage : 1252
系统区域已设置为“英语(美国)”,仍出现该问题。
问题原因
IBM ACE依赖的IBM J9虚拟机不识别Windows系统使用的MS65001字符集别名(对应UTF-8),当JVM尝试加载该字符集时抛出异常。
解决方案
方法1:临时控制台环境变量设置
打开CMD控制台,先执行以下命令设置Java字符集参数,再运行ACE命令:
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 mqsilist
方法2:永久系统环境变量配置
- 打开系统属性 → 高级 → 环境变量
- 点击系统变量区域的新建,输入:
- 变量名:
JAVA_TOOL_OPTIONS - 变量值:
-Dfile.encoding=UTF-8
- 变量名:
- 保存后重启控制台,即可正常执行ACE命令。
方法3:修改IBM ACE启动脚本
- 定位到ACE安装目录下的
bin文件夹,默认路径为C:\Program Files\IBM\ACE\12.0.6.0\bin - 编辑
mqsi.cmd文件,找到调用Java的行(类似"%JAVA_HOME%\bin\java"),添加字符集参数:"%JAVA_HOME%\bin\java" -Dfile.encoding=UTF-8 ... - 保存修改后,直接运行ACE命令即可生效。
内容的提问来源于stack exchange,提问作者Boro
相关产品推荐
相关产品推荐

