UTF-8编码和Struts 2.1.7

3
根据标题,我遇到了字符集编码的问题,在波兰语中看到了“?”代替特殊字符。我将尝试解释一下我的问题。
我有一个JSP页面,其中包含以下代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

我有一个这样编写的Ajax调用:

$.ajax({
                url :urlToPrepend + "url/load.action",
                type : "post",
                dataType : "json",
                async:false,
                data : 
                {
                    repeat: 0,
                    changedLayoutName:activeLayoutRS,
                    sapNamesWithConfig:selectedColumnSAPNamesWithConfigRS,
                    columnNamesWithConfig:selectedColumnNamesWithConfigRS,
                    sortBy:sortByWithConfigRS,
                    extractConfig:extractConfigRS,
                    savedParams:savedParams
                },
                success : function(data) 
                {
                     data.columNames

data.columnNames 包含一个来自 Java Action 的带有波兰标签的列表。如果我在 Firefox 中设置调试点,我会看到字符串中的标记问号而不是正确的重音符号。

在 Java Action 中,我尝试添加以下代码行:

response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");

我还尝试在struts.properties文件中添加参数:

struts.i18n.encoding=UTF-8

我尝试在特定操作的struts.xml中添加param encoding,但没有奏效。您对解决方案有什么想法吗?

更新:

columnNames数据是一个ArrayList

columnNames = new ArrayList<String>();

填充内容使用getText()方法:

columnNames.add(getText(columnData.getValue())))

其中 columnData.getValue() 是 properties 文件中的键(例如: catalogue=Rodzina produkt\u00f3w)。如果我在调试中放置一个表达式测试,我可以看到这个标签也编码了Rodzina produktów,但在 json 响应中我看到的是:

"columnNames":["","","Pojazd","Rodzina produkt�w"

使用以下代码将ArrayList存放在jsonData中:

jsonData.put("columnNames", columnNames);

更新2:

我发现我们正在使用一个名为GZIP的插件执行某些操作。对于这个插件,在struts.xml文件中,成功部分的结果定义如下:

    <result name="success" type="json">
        <param name="excludeNullProperties">true</param>
        <param name="root">jsonData</param>
        <param name="enableGZIP">true</param>
    </result>

你知道它是如何工作的吗?

更新3:

移除enableGZIP后,一切都按预期工作,因此唯一的问题就在于这个特定的插件。


请在您的操作中发布生成JSON的代码。 - Roman C
你在帖子中没有提到任何gzip插件。你如何使用它? - Aleksandr M
尝试在结果配置中明确添加“encoding”参数:<param name="encoding">UTF-8</param>。 - Aleksandr M
另外,S2的哪个版本? - Aleksandr M
谢谢Aleksandr,我已经尝试使用编码参数了,但似乎被忽略了。只有当我保持enableGZIP参数时,编码才会失败。 - Suxper
显示剩余2条评论
1个回答

0

问题出在Java和ajax回调之间的步骤,因为当数据到达JavaScript代码时,标签已经受损。 - Suxper
如果您以“Rodzina produkt\u00f3w”格式获取数据,则可以对其进行解码。您是以这种方式发送的吗? - Roman C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接