Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 奇异字符编码_Java_Character Encoding_Websphere Liberty_Open Liberty - Fatal编程技术网

Java 奇异字符编码

Java 奇异字符编码,java,character-encoding,websphere-liberty,open-liberty,Java,Character Encoding,Websphere Liberty,Open Liberty,我有一个在WebSphere Liberty Linux上运行的项目。 我的语言是巴西葡萄牙语,我们有一些口音的单词。 我的java代码设置了一些用户消息,如下所示: ... ErroResponse erroResponse = new ErroResponse(); erroResponse.setMensagem("Esse grupo não pode ser criado. Já existe um grupo criado com esse nome."); response = R

我有一个在WebSphere Liberty Linux上运行的项目。 我的语言是巴西葡萄牙语,我们有一些口音的单词。 我的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设置JVM编码 -d文件编码为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资源中

一个有用的调试步骤是使用诸如client和hex-editor(如
od-t x1
)之类的命令查看响应,因为有很多东西可能会掩盖实际传输的数据(浏览器、终端仿真器等)

如果明确告诉服务器使用字符集(UTF-8或像ISO8859-1这样的本地代码页),则字符串将转换为指定的代码页。浏览器还会在内容类型标题中看到字符集

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

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


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


要进行此更改,我必须右键单击Project->Properties->Resource,然后将文本文件编码更改为Other(ISO-8859-1)。

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

通过将其添加到父maven项目解决了此问题:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

UTF-8

一个(此处不太可能)原因可能是java源代码被编辑为UTF-8,但编译为ISO-8859-1实例。(在JSP中更常见)尝试使用
\u00E3
而不是
ã
来检查这一点。我如何强制它编译为UTF-8而不是ISO-8859-1?@JoopEggen你是对的。在你的评论之后,我可以找到一个解决方案。谢谢。我已经试着设置为pt_BR.utf8和en_US.iso885915。仍然没有成功。如果您使用Maven或类似的构建工具,正确编码的声明属于pom.xml(Maven)或build.properties(Gradle)或build.xml(Ant)文件,以便在重新安装Eclipse后仍然有效。
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>