我有一个在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。
我非常感谢任何帮助。
谢谢
尝试检查您的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"
在添加这些JVM编码属性之前,您可能会在响应中获得该字符的UTF-8编码,但您的浏览器不愿意将它们解释为UTF-8。我建议删除它们并将其保留在JAX-RS资源中。
一个有用的调试步骤是使用像客户端和十六进制编辑器(如od -t x1
)这样的命令来查看respone,因为有很多东西可以模糊实际传输的数据(浏览器,终端仿真器等)。
如果明确告诉服务器使用字符集(UTF-8或ISO8859-1等本地代码页),则字符串将转换为指定的代码页。浏览器还会在Content-Type标头中看到charset。
最简单的方法是在JAX-RS中使用@Produces,如下所示:
@Produces("text/html; charset=UTF-8")
要么
@Produces("text/html; charset=ISO8859-1")
更改项目文本编码后问题得以解决。默认情况下,eclipse将源代码保存为UTF-8,javac将其编译为CP1252(Windows默认值)。
要进行此更改,我必须右键单击Project - > Properties - > Resource,然后将Text file encoding更改为Other(ISO-8859-1)。
我的maven和jax-ws服务有类似的问题,它返回了坏的字符(源代码中的文本)。
通过将其添加到父maven项目来解决它:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>