我正在使用OpenLiberty (通过它的maven插件自动下载),我的应用程序运行良好(jax-rs和servlet/jsp输出都很好)。
但是控制台(和messages.log)的输出是混乱的。以下是一个例子:
[INFORMAıåES] SRVE0253I: [io.openliberty.microprofile.health.3.0.internal] [/health] [HealthCheckServlet]: Destrui?Æo bem sucedida.(预期为[INFORMAÇÕES] ... Destruição bem sucedida.)
显然,在UTF-8有能力的终端中,这些消息被打印为ISO-8859-1 .
同样,这个问题不是关于运行在OpenLiberty容器中的应用程序,它完全是UTF-8,工作正常。是关于控制台输出的。
一个部分有用的解决方法是将它的区域设置更改为en-US (这样OpenLiberty的消息就不需要任何特殊的字符)。实际上,我更喜欢英语错误信息,因为它们比google更容易使用。
我已经试过LANG=en-US.UTF8,LC_ALL=en_US和LC_MESSAGES=en_US了,但没有结果。
项目的有效pom.xml已经声明了<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>。我项目中的每一个文件都是UTF-8。项目的.editorconfig [*] charset = utf-8 (所以vscode以utf-8的形式创建每个新文件)。
我在Windows10上使用bash 64_NT-10.0-18363+ConEmu 5。LANG默认为=pt_BR.UTF-8。
更新
通过将-Duser.language=en添加到${server.config.dir}/jvm.options,我成功地将地区设置为en-US。
老实说,我是通过插件做到的:
<properties>
...
<liberty.jvm.language>-Duser.language=en-US</liberty.jvm.language>
...
</properties>(对于liberty-maven-plugin本身,我在MAVEN_OPTS中添加了-Duser.language=en )
不幸的是,-Dfile.encoding=UTF-8什么也没做。
更新2
我还在Arquillian驱动的junit测试中运行OpenLiberty。有趣的是,当由阿基利安推出时,OpenLiberty尊重-Dfile.encoding=utf-8设置。
对于arquillian,可以通过arquillian.xml进行配置。
<arquillian ...>
<container qualifier="liberty_managed" default="true">
<configuration>
...
<property name="javaVmArguments">-Dfile.encoding=utf-8</property>
...
</configuration>
</container>
</arquillian>或者在${server.config.dir}/jvm.options中(就像我以前做的那样):
-Dfile.encoding=utf-8我的结论是,-Dfile.encoding 是处理这个问题的正确方法,。但不知何故,当它由liberty-maven-plugin推出时,却没有受到尊重。我将仔细研究它的源代码。
发布于 2021-04-23 21:44:11
更新的答案:,这是可配置的通过选项。
注意,通常情况下,文件要求您每行使用一个选项。
如果要使用多个选项并使用配置它们,可以执行以下操作:
<properties>
<liberty.jvm.arg1>-Duser.language=pt</liberty.jvm.arg1>
<liberty.jvm.arg2>-Duser.country=BR</liberty.jvm.arg2>
<liberty.jvm.arg3>-Dfile.encoding=utf-8</liberty.jvm.arg3>
</properties> (请注意,除了分配唯一的Maven项目属性名称之外,arg1、arg2、arg3后缀并没有真正被使用,但是没有出现在jvm.options文件中)。
您的终端程序必须支持显示这些字符。例如,对于我使用带有默认设置的Git Bash默认终端(在US/English安装上),上述葡萄牙语配置中的字符不会显示,除非单击窗口图标然后添加“选项”并添加以下内容:

https://stackoverflow.com/questions/67232340
复制相似问题