解决中文JSP乱码的问题

电脑杂谈  发布时间:2020-06-30 03:14:53  来源:网络整理

jsp页面乱码_jsp页面乱码_html转jsp 乱码

解决中文JSP乱码的问题

在JSP开发过程中,经常会出现中文乱码的问题,这可能会立即困扰每个人. 现在编写JSP开发中遇到的中文乱码问题和解决方案,以供您参考. 首先了解Java中文问题的起源:

Java的内核和类文件基于unicode,这使得Java程序具有良好的跨平台性,但同时也带来了中文乱码问题. 造成这种情况的主要原因有两个: 编译Java和JSP文件本身时产生乱码问题,以及Java程序与其他媒体进行交互时产生乱码问题. 首先,Java(包括JSP)源文件可能包含中文,并且Java和JSP源文件是基于字节流保存的. 如果将Java和JSP编译到类文件中,则使用的编码方法和源文件如果编码不一致,则会出现乱码. 基于此乱码,建议不要在Java文件中编写中文(注释部分不参与编译,可以编写中文),如果必须编写,请尝试使用-ecoding GBK或-ecoding参数手动编译gb2312或-ecoding UTF-8;对于JSPjsp页面乱码,添加<%@页面contentType =“ text / html; charset = GBK”%>或

<%@页面contentType =“ text / html; charset = gb2312”%>基本上可以解决此类乱码问题.

以下是一些常见的中文乱码问题的解决方案(以下示例中的编码使用gb2312,也可以将其设置为编码GBK或编码UTF-8):

首先,乱码的JSP页面

这种乱码问题相对简单. 通常是由页面编码不一致引起的. 通常,新手都容易出现此类问题. 有两种具体情况:

Ø未指定字符集编码

以下显示页面(display.jsp)出现乱码:

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html charset=gb2312">

</head>

<body>

<%out.print("JSP的中文处理");%>

</body>

</html>

此乱码的原因是未指定页面中使用的字符集编码,中文字符出现在JSP页面中,并且默认的ISO-8859-1字符集中没有中文字符. 解决方案: 仅在页面开头使用以下代码指定字符集编码. 在JSP页面中指定编码方法(gb2312),该方法与浏览器解码方法设置相同,即,将其添加到页面的第一行:

<%@页面contentType =“ text / html; charset = gb2312”%>,则可以消除乱码.

完整页面如下:

<%@ page contentType="text/html; charset=gb2312"%>

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html charset=gb2312">

</head>

<body>

<%out.print("JSP的中文处理");%>

</body>

</html>

Ø编码字符集不一致

以下显示页面(display.jsp)出现乱码:

html转jsp 乱码_jsp页面乱码_jsp页面乱码

<%@ page language="java" pageEncoding="gb2312"%>

<%@ page contentType="text/html;charset=iso8859-1"%>

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html charset=gb2312">

</head>

<body>

<%out.print("JSP的中文处理");%>

</body>

</html>

出现乱码的原因是页面编码不一致导致的乱码. 在此示例中,我们可以看到在三个位置设置了字符集. 让我们看一下这三个设置的具体含义:

第一个<%@页面语言=“ java” pageEncoding =“ gb2312”%>的编码格式是jsp文件的存储格式. Eclipse将根据此编码格式保存文件. 并编译包含内部汉字的jsp文件.

第二位被编码为解码格式. 因为另存为gb2312的文件被解码为iso8859-1,所以如果有中文,它将出现乱码. 它必须是一致的. 第二行不是必需的. 缺省值为使用iso8859-1编码格式. 因此,如果没有这一行,也会出现乱码. 必须一致.

第三位是控制浏览器的解码方法. 如果先前的解码是一致且正确的,则无需设置即可使用此编码格式. 某些网页出现乱码,因为浏览器无法确定要使用的编码格式. 由于页面有时嵌入在页面中,导致浏览器混淆编码格式并出现乱码.

完整的解决方案代码如下:

<%@ page language="java" pageEncoding="gb2312"%>

<%@ page contentType="text/html;charset= gb2312"%>

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html charset=gb2312">

</head>

<body>

<%out.print("JSP的中文处理");%>

</body>

</html>

以中文提交表单时出现第二个乱码

以下是提交页面(submit.jsp),代码如下:

<%@ page contentType="text/html; charset=gb2312"%>

<html>

<head><title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<form name="form1" method="post/get" action="process.jsp">

<div align="center">

<input type="text" name="name">

<input type="submit" name="Submit" value="Submit">

</div>

</form>

</body>

</html>

以下是流程页面(process.jsp)的代码:

<%@ page contentType="text/html; charset=gb2312"%>

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<%=request.getParameter("name")%>

</body>

</html>

如果submit.jsp正确提交了英文字符,那么如果您提交中文,则会出现乱码. 原因: 浏览器默认使用UTF-8编码方法发送请求,并且UTF-8和GB2312编码方法指示不同的字符,从而出现无法识别的字符.

ØPOST提交方法

解决方案:

A. 接受参数时进行编码转换

String s = new String(request.getParameter(“ name”). getBytes(“ ISO-8859-1”),“ gb2312”);

修改后的process.jsp代码如下:

<%@ page contentType="text/html; charset=gb2312"%>

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<%

String s=new String(request.getParameter("name").getBytes("ISO-8859-1"),"gb2312") ;

out.print(s);

%>

</body>

</html>

如果使用此方法,则必须像这样对每个参数进行转码. 很麻烦但是,确实有可能获得汉字.

B. 通过request.seCharacterEncoding(“ gb2312”)对请求进行统一编码,实现了中文的正常显示.

修改后的process.jsp代码如下:

<%@ page contentType="text/html; charset=gb2312"%>

<%request.seCharacterEncoding("gb2312");%>

<html>

<head>

<title>JSP的中文处理</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<%=request.getParameter("name")%>

</body>

</html>

如果使用此方法接受该参数的页面不需要转码,则可以获取汉字参数. 但是每个页面都需要执行这句话.

C. 为了避免在每个页面上编写request.setCharacterEncoding(“ gb2312”),可以对所有jsps使用过滤器

编码. 是使用Servlet规范中的过滤器指定编码,主要代码如下:

import java.io.*;

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;

public void destroy(){

this.encoding = null;

}

public void init(FilterConfig filterConfig) throws ServletException

{

this.encoding = filterConfig.getInitParameter("encoding");

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

{

request.setCharacterEncoding(encoding);

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

chain.doFilter(request, response);

}

}


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-263082-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...