我正在扩展基于Struts2(和Struts2-jquery插件的现有代码,但我认为这不是问题的原因)。
我发现Internet Explorer 9出现了一种奇怪的行为(我不知道是否存在同样的问题也存在于以前版本的IE中),而这些行为并未出现在FireFox中。
我有一个带有一些输入字段的页面和一个用于在服务器上传文件的上传功能。当用户上传文件时,通过表单提交将其发送到服务器,然后Action返回到同一页面(重新加载页面)。如果我使用重音字母填充输入框,则在表单提交后重新加载页面时,而不是重音字母出现“方形”(它是�
)。这种情况只发生在IE中,而不是FireFox中(在提交之前字符保持不变)。
在web.xml
和struts.xml
文件中,没有JSP的编码配置。
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sj" uri="/struts-jquery-tags"%>
<s:form id="actionForm" name="actionForm"
theme="simple" cssClass="yform"
action="changeAction" acceptcharset="UTF-8">
<table>
<tr>
<td>field1</td>
<td>
<s:textfield id="field1" name="field1" maxlength="2048" value="%{field1}" disabled="false" size="98" required="true" />
</td>
</tr>
<tr>
<td><s:file name="docFacFileUploaded" size="50" /></td>
<td>
<sj:submit targets="main_section" id="uploadFileButton" value="File upload" button="true" indicator="indLoad" />
<img id="indLoad" src="indicator.gif" alt="Loading..." style="display:none" />
</td>
<tr>
</tr>
<td>field2</td>
<td>
<s:textfield id="field2" name="field2" maxlength="2048" value="%{field2}" disabled="false" size="98" required="true" />
</td>
</tr>
<tr>
<td>
<sj:submit targets="main_section" id="salvaButton" value="Salva" button="true" indicator="ind" />
<img id="ind" src="indicator.gif" alt="Loading..." style="display:none" />
</td>
</tr>
</table>
</s:form>
答案 0 :(得分:0)
可能您使用的是与浏览器设置不同的字符编码。例如,UTF-8 unicode与ISO-8859-1有一些差异。 Foriegn网站更糟糕。通常浏览器可以自动检测它,但它似乎并不总是有效。
转到视图菜单&gt;字符编码,然后在那里试用选项,直到找到正确显示的选项。
<%page contentType="text/html" pageEncoding="UTF-8"%>
或
header('Content-Type: text/html; charset=UTF-8');
答案 1 :(得分:0)
我在网址https://forums.oracle.com/forums/thread.jspa?messageID=3151892
的OTN论坛中找到了解决方案根据建议,我已在web.xml
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>utf-8</page-encoding>
</jsp-property-group>
</jsp-config>
这是我的JSP页面
<jsp:directive.page contentType="text/html;charset=utf-8"/>
所以它在IE和FF中正常工作。
答案 2 :(得分:0)
您需要在Web应用程序的整个操作链中保留相同的character set
,从客户端发送请求并从服务器接收请求,从服务器发送响应以及从客户端接收响应
在web.xml中使用UTF-8
编码,除了服务器接收GET
方法的请求之外,您将可以完成每一步(您需要配置Application Server连接器以使用{{1对于他们);
请注意,您的数据库也应该是UTF-8
,而不是(正如我在很多情况下在意大利看到的那样)UTF-8
也不是WE81ISO8859P1
......
UTF-8拥有您需要的一切,只需使用无处不在,您就可以了。
作为一个重要的注释,请记住在
时始终指定字符集从P15
Strings
而不是Byte Arrays
使用new String(myByteArray);
从new String(myByteArray,"UTF-8");
获取Byte Arrays
时:
而不是Strings
使用myString.getBytes();