根据标题,我遇到了字符集编码的问题,在波兰语中看到了“?”代替特殊字符。我将尝试解释一下我的问题。
我有一个JSP页面,其中包含以下代码:
我有一个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
后,一切都按预期工作,因此唯一的问题就在于这个特定的插件。