无法使用sun-web.xml设置字符编码

时间:2010-03-18 20:10:11

标签: java jsp glassfish utf

我正在尝试将特殊字符(如西班牙语字符)从我的页面发送到JSP页面作为表单参数。当我尝试获取我发送的参数时,它显示为“?” (问号)。 在java.net线程上搜索后,我发现我应该在sun-web.xml

中输入以下内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd">
<sun-web-app>
<locale-charset-info default-locale="es">
<locale-charset-map locale="es" charset="UTF-8"/>
<parameter-encoding default-charset="UTF-8"/>
</locale-charset-info>
</sun-web-app>

但是这种方法不起作用,这个角色仍然是“?”。

2 个答案:

答案 0 :(得分:3)

尝试这个,同时确保在将字符发送到表单或数据库之前对UTF-8中的字符进行编码。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Sun ONE Application Server 8.0 Servlet 2.4//EN" "http://www.sun.com/software/sunone/appserver/dtds/sun-web-app_2_4-0.dtd">

<sun-web-app>
<locale-charset-info default-locale="">
<locale-charset-map locale="" charset=""/>
<parameter-encoding default-charset="UTF-8"/>
</locale-charset-info>
</sun-web-app>

这使得服务器可以对您设置的任何内容强制执行字符编码。

答案 1 :(得分:1)

您只配置了请求参数编码。根据症状,您还需要配置响应编码。在JSP页面中,通常将以下行添加到顶部就足够了:

<%@page pageEncoding="UTF-8" %>

可以找到更多背景信息和技术解决方案here

当您使用数据库时,另一个可能的原因是数据库未配置为使用UTF-8,因此字符已经存储为垃圾,无论您查询它,它总是会返回垃圾。使用独立的数据库管理工具查看它。如果确实如此,那么您还需要设置数据库表编码。