我用java连Oracl,从Oracle中取出中文。我首先用一个static main方法来调用,可以取出中文。但是我用一个servlet来调用,取出来的中文就变成乱码了。请教各位高手,这个要怎么解决?而且用servlet调用时,插入中文都是正常的。
解决方案 »
- 数据库文件创建问题
- js设置cookie,servlet读cookie,读不到,急
- 数据插入表中出现时间差
- 我的Spring2.5.6中怎么不能用TestContext测试框架?
- 运行java程序,老是提示不能找到符号 请求帮助 (已贴出相关代码)
- 新手求助
- 请教高手 在struts-config中如何配置weblogic中的datasource阿 急
- 救命啊!jboss突然不响应了!
- 请教关于:websphere中oracle数据源的设置(在线等待)
- 编译CMP模式EJB时出错,请高手指教
- 关于j2ee的提问,如何利用hibernate与spring与mysql数据库连接
- Weblogic打印出的信息,求助!
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class EncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Select and set (if needed) the character encoding to be used
String encoding = selectEncoding(request);
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}web.xml中添加:<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>blog.util.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value></init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这是mysql的,
你在Oracle连接的后面加上红色部分试试!
useUnicode=true&characterEncoding=gb2312
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 场合:页面本身有中文的时候
解决办法:servlet:resp.setContentType("text/html;charset=gbk");
Jsp: <%@ page contentType="text/html;charset=gb2312"%>
注意:一定要写在PrintWriter out = resp.getWriter();之前
场合:解决get方式乱码问题:
解决办法:修改server.xml ?URIEncoding="GBK"
场合:解决post方式提交内容的乱码
解决办法:request.setCharacterEncoding("GBK");
注意:一定要写在存取第一个参数之前
不要调用response.setCharacterEncoding("GBK");
场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数
解决办法:<%request.setCharacterEncoding("GBK");%>
注意:
荐于经常看到朋友说哪里出现中文乱码了,菜鸟我以自己在项目经常遇到的整理了一下,有以下几个方面: 1.最基本的在jsp页面上要把pageEncoding设置为中文,如: <%@ page language="java" pageEncoding="GBK"%> 2.对于表单的doPost()提交,也会出现中文出现乱码,可以在servlet里设置如下:request.setCharacterEncoding("GBK"),response.setCharacterEncoding("GBK"),不过此方法在每个servlet都要设置,很麻烦,建议写个过滤器设置。可以参考以下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { HttpServletRequest request_1 = (HttpServletRequest) request;
HttpServletResponse response_1 = (HttpServletResponse) response; // 转换编码,并且加上去缓存
request_1.setCharacterEncoding("GBK");
response_1.setCharacterEncoding("GBK");
chain.doFilter(request, response); }
3、第三种就是 如果用doGet()提交,后面跟的参数如果也是中文,这个解决方法可以在tomcat或JBoss的配置文件里面配置,以tomcat为例:
<Connector port="8099" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
在这里面最后加上URIEncoding="GBK".
4、ajax也会产生乱码问题,这个问题可以在tomcat的配置那里解决。 5、文件上传时文件名也会出现乱码。
可以用此方法paramMap.put(fi.getFieldName(), new String(fi.getString().getBytes("ISO-8859-1"),"GBK"));
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
试试,看中文成乱码问题是否能解决!!!
request.setCharacterEncoding("utf-8");
然后将Servlet的doGet或doPost方法中的第一句也加上
request.setCharacterEncoding("utf-8");
也就是基本上在所有的页面或Servlet的编码及接受参数的编码都设为utf-8.