Liberty 和 OpenLiberty 控制台/消息编码为 UTF-8

问题描述 投票:0回答:2

我正在使用 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
发起时,它并没有受到尊重。我会仔细研究它的源代码。

utf-8 websphere-liberty open-liberty
2个回答
0
投票

更新的答案:这可以通过 JVM 选项进行配置。

请注意,一般来说,

jvm.options 文件要求您每行使用一个选项。

如果想使用多个选项并使用

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 默认终端,上述葡萄牙语配置中的字符不会显示,除非单击窗口图标,然后单击“选项”并添加以下内容:


0
投票
将以下 JVM 选项添加到“jvm.options”文件解决了我的 WebSphere Liberty 编码问题,并可能对其他人有所帮助:

(通过在“运行方式”>“运行配置”>“参数”>“VM 参数”中写入,它对于 Eclipse 中的独立应用程序也有效)

-Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8
    
© www.soinside.com 2019 - 2024. All rights reserved.