java web,中文乱码解决方法

本文详细阐述了Java中乱码产生的两大原因,并提供了全面的解决方案,包括页面参数、JSP显示、数据库交互及文件流操作时的具体处理方法。

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

  web工程中,乱码产生原因:java内核以及class文件是基于Unicode的,带来了良好的跨平台型,同时也带来了中文乱码的麻烦。主要原因包括两方面:

  1.java和jsp本身编译时产生的乱码:源文件中可能存在中文,而源文件的保存方式是基于字节流的,如果在其编译成class文件的过程中使用的编码方式与源文件不一直就会产生乱码。

  2.java和其他存储媒介交互式产生乱码:数据库、文件、流等存储方式也是基于字节流的,java程序在于这些存储方式进行交互时就会产生字符与字节之间的转换,转换过程中使用的编码方式与原编码方式不一致就会产生乱码问题。


解决方案:

1.关于jsp与页面参数之间的乱码解决:

   (1)页面参数的编码类型与系统默认的编码类型不一致造成的乱码:强制指定request获取参数的编码方式,如下

	request.setCharacterEncoding("GBk");

   (2)jsp在页面显示是出现乱码:在页面中设置编码格式,代码如下:

	response.setContentType("text/html;charset=GBK");

   (3)比解决方案(2)更简单的方法是使用filter进行过滤,web.xml中的配置省略,filter包下的CodeFilter类的主要代码如下:

public class CodeFilter implements Filter
{
 	public void destroy(){}			//销毁方法
        public void doFilter(ServletRequest req,ServletRequestResponse resp,FilterChain chain) throws IOException,ServletException
	{
  		HttpServletRequest request = (HttpServletRequest)req;		//强制类型转换
  		HttpServletResponse response = (HttpServletResponse)resp;	//强制类型转换
 		request.setCharacterEncoding("gbk");				//设置request对象的编码格式为gbk
		response.setCharacterEncoding("gbk");				//设置response对象的编码格式为gbk
		chain.doFilter(request,response);
	}
	public void init(FilterConfig conf) throws ServletException {}		//初始方法
}

   (3)jsp与数据库之间的乱码解决方案:可以在驱动的URL参数中直接进行指定:

	jdbc:mysql://localhost/your_DB_name?user=root&password=root&useUnicode&characterEncoding=GBK

   (4)java与文件、流之间乱码的解决方案:java往往通过FileReader和FileWirter这两个类完成字符类型的读写,但这两个类的默认构造函数会使用系统的编码方式,如果文件的内容与系统的编码方式不一样,便会出现乱码。建议使用其父类,即InputStreamReader(InputStream in,Character cs)和OutputStreamWriter(OutputStream out,Character cs)

  

   以上便是自己学习时总结的一些java乱码解决方案,参考了《java web 开发学习实录》(清华大学出版社)一书及相关博客中的内容,仅供学习与交流。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值