3

我有一个在 Linux 上的 WebSphere Liberty 上运行的项目。我的语言是巴西葡萄牙语,我们有一些带重音的单词。我的 java 代码设置了一些用户消息,如下所示:

...
ErroResponse erroResponse = new ErroResponse();
erroResponse.setMensagem("Esse grupo não pode ser criado. Já existe um grupo criado com esse nome.");
response = Response.status(Status.BAD_REQUEST).entity(erroResponse).build();
...

当向用户显示相同的消息时,它看起来是这样的: 在此处输入图像描述

我认为这不是浏览器编码问题,因为该消息在我的服务器日志上看起来相同。 在此处输入图像描述

我尝试使用 -Dclient.encoding.override -Dfile.encoding 将 JVM 编码设置为 ISO-8859-1 和 UTF-8,但没有成功。

在 Windows 服务器上运行的同一个项目可以毫无问题地运行,并以正确的重音显示消息。

只有直接写在源代码中的消息才有这个问题。来自数据库查询结果的重音词被正确呈现。

我正在使用 Suse 11.4。

我真的很感激任何帮助。

谢谢

4

4 回答 4

0

问题已解决,更改项目文本编码。默认情况下,eclipse 将源代码保存为 UTF-8,javac 将其编译为 CP1252(Windows 默认)。

要进行此更改,我必须右键单击项目 -> 属性 -> 资源,然后将文本文件编码更改为其他 (ISO-8859-1)。

于 2017-07-25T18:30:31.413 回答
0

尝试通过执行以下操作检查您的 Suse 编码和语言:

$ echo $LC_CTYPE
ISO-8859-1

$ echo $LANG
pt_BR

获取所有语言:

$ locale -a

更改为 pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"
于 2017-07-24T22:49:44.417 回答
0

很可能在添加这些 JVM 编码属性之前,您在响应中获得了该字符的 UTF-8 编码,但您的浏览器不愿意将它们解释为 UTF-8。我建议删除它们并将其保留在您的 JAX-RS 资源中。

一个有用的调试步骤是使用客户端和十六进制编辑器(如od -t x1)之类的命令查看响应,因为有很多东西可以掩盖实际传输的数据(浏览器、终端仿真器等)。

如果您明确告诉服务器使用字符集(UTF-8 或 ISO8859-1 等本地代码页),您的字符串将被转换为指定的代码页。浏览器还将在 Content-Type 标头中看到字符集。

最简单的方法是在 JAX-RS 中使用 @Produces,如下所示:

@Produces("text/html; charset=UTF-8")

或者

@Produces("text/html; charset=ISO8859-1")
于 2017-07-24T22:52:18.137 回答
0

我在 maven 和 jax-ws 服务中遇到了类似的问题,它返回了错误的字符(源代码中的文本)。

通过将其添加到父 maven 项目来解决它:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
于 2019-03-14T13:20:20.017 回答