中文乱码的问题

本文全面解析并提供解决JSP、Servlet及数据库操作中出现的中文乱码问题的策略,涵盖页面、GET/POST请求、数据库连接等场景,确保中文信息正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 解决中文乱码问题

Jsp程序的开发过程中经常会遇到中文乱码问题,以下几种中文乱码的情况。

  1. 页面乱码

问题描述:页面乱码一般是因为编译时没有指定字符集造成的

解决办法:在jsp的page指令中添加<%@ pageEncoding=GBK%>就可以解决。

如下所示:<%@ page contentType=text/html;charset=GBK language=java import=java.sql.* errorPage=”” %>

  1. 访问servlet时出现乱码:

问题描述:在请求servlet时,返回结果出现乱码。

解决办法:在servlet中使用response输出,在输出内容之前,先执行response.setContentType(text/html;charset=GBK)

  1. Get方式表单传递和URL方式传递是乱码:

解决办法:设置服务器,设置服务器,即在tomcat安装目录下找到conf/server.xml,设置URIEncoding=GBK如下所示:

<Connector port=8080protocol=HTTP/1.1connectionTimeout=20000redirectPort=8433URIEncoding=GBK>

此外,对于get方式提交的表单,可以采用数组字节转换的方式

即将获得的字符转换为字节数组,然后再生成字符串,其代码段如下:

<%

Public String chgStr(String str){

Try{

String temp_p=str;

byte[] temp_t=temp_p.getBytes(ISO8859-1);

String temp=new String(temp_t);

return temp;

}catch(Exception e){

return null;

}

}

%>

<%

String name=chgStr(request.getParameter(name));

%>

chgStr()方法就是将get方式提交的数据通过编码转换,让中文显示正常。

  1. Post方式表单传递参数乱码

问题描述:通过表单以post方式提交数据给JSP或Servlet而出现中文乱码的情况。

解决办法:在接收post提交的参数之前,使用request.setCharacterEncoding(GBK)语句设定request对象接收参数时使用GBK编码。

  1. 使用过滤器,建立Encoding过滤器,通过过滤器,解决所有post提交的数据的中文乱码的问题。

对应的过滤器如下所示:

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;

public class SetCharacterEncodingFilter implements Filter {
  protected String encoding=null;
  protected FilterConfig filterConfig=null;
  
    public SetCharacterEncodingFilter() {
     
    }
 public void destroy() {
  this.encoding=null;
  this.filterConfig=null;
 }
 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
 throws IOException, ServletException {
  if(request.getCharacterEncoding()==null){
   String encoding=getEncoding();
   if(encoding!=null){
    request.setCharacterEncoding(encoding);
   }
  }
  chain.doFilter(request, response);
 }

 public void init(FilterConfig fConfig) throws ServletException {
  this.filterConfig=filterConfig;
  this.encoding=filterConfig.getInitParameter("encoding");
 }
 protected String getEncoding(){
  return (this.encoding);
 }
}

配置如下:

<filter>
    <display-name>SetCharacterEncodingFilter</display-name>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <filter-class>filter.SetCharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SetCharacterEncodingFilter</filter-name>
    <url-pattern>/SetCharacterEncodingFilter</url-pattern>
  </filter-mapping>

  1. MySql数据库读取写入数据时出现乱码

问题描述:当通过SQL语句写入数据或读取数据时出现乱码的情况,这是由于JDBC连接MySql时编码不一致造成的。

解决办法:连接数据库时,指定连接数据库URL中字符集的属性

getConnection(url,username,password)

在java程序通过JDBC连接时:url=jdbc:mysql://127.0.0.1:3306/hnet?useUnicode=true&characterEncoding=GBK;

若在XML中配置JNDI时,则为:

Url=jdbc:mysql://127.0.0.1:3306/hnet?useUnicode=true&characterEncoding=GBK;其中characterEncoding=GBK表示指定字符集为中文。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值