我正在使用 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 的消息不需要任何特殊字符)。实际上,我更喜欢英文错误消息,因为它们更容易通过谷歌搜索。我已经尝试过
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)。我在 Windows 10 上使用 bash MINGW64_NT-10.0-18363 + ConEmu-Maximus5。
LANG
默认为
=pt_BR.UTF-8
。
更新
我已成功通过添加将区域设置设置为 en-US-Duser.language=en
至
${server.config.dir}/jvm.options
。说实话,我是通过 liberty-maven-plugin 做到的:
<properties>
...
<liberty.jvm.language>-Duser.language=en-US</liberty.jvm.language>
...
</properties>
(对于 liberty-maven-plugin
本身,我已将
-Duser.language=en
添加到
MAVEN_OPTS
)不幸的是,
-Dfile.encoding=UTF-8
什么也没做。
更新2
我还在 Arquillian 驱动的 junit 测试中运行 OpenLiberty。有趣的是,当由 arquillian 启动时,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
发起时,它并没有受到尊重。我会仔细研究它的源代码。
更新的答案:这可以通过 JVM 选项进行配置。
请注意,一般来说,如果想使用多个选项并使用liberty-maven-plugin 属性 来配置它们,您可以执行以下操作:
<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>
(请注意,arg1、arg2、arg3 后缀除了分配唯一的 Maven 项目属性名称外并没有真正使用,但不会出现在 jvm.options 文件中)。并且您的终端程序必须支持显示这些字符。例如。对于我来说,在美国/英语安装中使用具有默认设置的 Git Bash 默认终端,上述葡萄牙语配置中的字符不会显示,除非单击窗口图标,然后单击“选项”并添加以下内容:
(通过在“运行方式”>“运行配置”>“参数”>“VM 参数”中写入,它对于 Eclipse 中的独立应用程序也有效)
-Dstdout.encoding=UTF-8
-Dstderr.encoding=UTF-8