首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自由和OpenLiberty控制台/消息编码到UTF-8

自由和OpenLiberty控制台/消息编码到UTF-8
EN

Stack Overflow用户
提问于 2021-04-23 15:01:33
回答 1查看 478关注 0票数 1

我正在使用OpenLiberty (通过它的maven插件自动下载),我的应用程序运行良好(jax-rs和servlet/jsp输出都很好)。

但是控制台(和messages.log)的输出是混乱的。以下是一个例子:

代码语言:javascript
复制
[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.UTF8LC_ALL=en_USLC_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。

老实说,我是通过插件做到的:

代码语言:javascript
复制
  <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进行配置。

代码语言:javascript
复制
<arquillian ...>
    <container qualifier="liberty_managed" default="true">
        <configuration>
            ...
            <property name="javaVmArguments">-Dfile.encoding=utf-8</property>
            ...
        </configuration>
    </container>
</arquillian>

或者在${server.config.dir}/jvm.options中(就像我以前做的那样):

代码语言:javascript
复制
-Dfile.encoding=utf-8

我的结论是,-Dfile.encoding 是处理这个问题的正确方法,。但不知何故,当它由liberty-maven-plugin推出时,却没有受到尊重。我将仔细研究它的源代码。

EN

回答 1

Stack Overflow用户

发布于 2021-04-23 21:44:11

更新的答案:,这是可配置的通过选项。

注意,通常情况下,文件要求您每行使用一个选项。

如果要使用多个选项并使用配置它们,可以执行以下操作:

代码语言:javascript
复制
    <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安装上),上述葡萄牙语配置中的字符不会显示,除非单击窗口图标然后添加“选项”并添加以下内容:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67232340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档