您的当前位置:首页怎么解决JSP页面中文问题

怎么解决JSP页面中文问题

2023-02-23 来源:飒榕旅游知识分享网


怎么解决JSP页面中文问题

====================================================================================

<%@ page language=\"java\" pageEncoding=\"UTF-8\"%> 这个地方的编码格式为jsp文件的存储格式 如果没有下面的这一行:编码解码都以pageEncoding的为准

有下面这一行:编码解码的的字符编码要统一,此处为:UTF-8

<%@ page contentType=\"text/html;charset= UTF-8\"%> 这个地方编码为解码格式(从服务器返回的数据格式)

中文问题

要在head标签中

此处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这句话可以省掉。

其次还与表单的提交方式有关:

Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”

连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式, 传递到action所指向URL。Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据

Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。默认是用ISO-8859-1编码 ISO10646标准:对字符编码有:unicode,ISO 10646,UCS,UTF8,UTF16,GBK,GB2312

小结:为了能使应用兼容多服务器,应按照jsp标准。对于编码问题统一使用

1 <%@ page contentType=\"text/html;charset=UTF-8\" pageEncoding=\"UTF-8\"%> 编码解码写到一起 2 采用post的提交方式

3 对于上下页提交表单取参数有中文的: 用过滤器,只对post有效对get提交方式无效。

4 对于超链有中文参数的:

如: 如果过滤器解决不了用硬编码转换:在88.jsp页面中: String strvalue=request.getParameter(“name”);

strvalue = new String(strvalue.getBytes(\"ISO8859_1\"), \"GBK\"); 或者:

带中文参数走,防止中文乱码:tomcat 中server.xml文件中加入

例如:1

action=\"actions/myTagTestAction10?username=张三&password=张三的密码!getTag1Paramter1\"> 例如:2

去action获取参数

由于eclipse的编码:utredit , editplus的保存的编码方式不一样。编写jsp文件或xml文件时。 对jsp程序运行造成乱码问题: Xml文件不可解析问题。

建议全部用eclipse编写:设定eclipse的编码格式为:utf-8, 这样用eclipse 新建一个jsp文件时, 自动保存的文件格式是:utf-8. 页面的编码:统一用utf-8的编码格式。

----------------------------------------------------------------------------------------------------------------------------------------------------- 对于get提交方式尽量少用。如要使用: 在接收表单数据的页面:

采用: request.setCharacterEncoding(); 设定编码

再用: request.getParameter(“控件名称”) 获取表单的值: 其次可以设定tomcat的字符集:server.xml文件中:

pageEncoding: 是jsp文件本身的编码(也就是JSP编译成Servlet时要知道文件的使用的编码才能编译), 跟页面显示的编码没有关系。

如果你的是WIN98, 或 ME 的NOTEPAD记事本编写JSP, 就一定是常用的是Big5 或 gb2312, 如果是用 WIN2k winXP的记事本时, 保存时就可以选择不同的编,码, 包括 ANSI(BIG5/GB2312)或 UTF-8 或 UNIONCODE(估是 UCS 16).

contentType: 指定了JSP页面回应时的字符编码方式。字符编码方式的默认值是ISO-8859-1

pageEncoding:还有一个功能,就是在JSP中不指定contentType参数,也不使用 response.setCharacterEncoding方法时,指定对服务器响应进行重新编码的编码。

也就是如果:pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定, 否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采 用默认的ISO-8859-1。

如果ContentType中指定charset为GBK,而pageEncoding指定UTF-8,这样header中会发送什么数据呢?发送的数据是UTF-8

3. pageEncoding和contentType的关系:

1. pageEncoding是jsp文件本身的编码,是告诉web服务器 jsp页面是什么编码。

JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat 出来的网页, 用的是contentType

2. 第一阶段是jsp编译成.java的过程,它会根据pageEncoding的设定读取jsp,结果是由指定的编

码方案翻译成统一的UTF-8 JAVA源码(即.java).

3. 第二阶段是将JAVA源码编译成java 字节代码.class的过程, JAVAC用UTF-8编码读取java源码,

编译成UTF-8编码的二进制码(即.class),

4. 第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,

输出结果到客户端见到的页面,这时contentType就发挥了功效。

==================================================================================

4. 和contentType效果一样的设置方式还有: 1: html页面charset

<%@page contentType=\"text/html; chareset=gbk\"%>

. 要在head标签中

2: response.setContentType(\"text/html;charset=UTF-8\"); response.setCharacterEncoding() 其中:response.setContentType()优先级最好,

其次是response.setCharacterEncoding(); :服务器在将数据发送到浏览器前,对数据进行重新编码. 再者是 <%@page contentType=\"text/html; chareset=gbk\"%>,

最后是.

对于servlet中设定字符集:

request.setCharacterEncoding(\"UTF-8\"), 能修改Serverlet获取请求的编码,

response.setContentType(\"text/html;charset=UTF-8\");, 能修改Serverlet返回结果的编码.

=================================================================================

========================================编码====================================== ASCII

常见的英文字符,数字,以及标点符号。用一个字节表示,一共可表示256个字符,对于使用英文的国家来说

已经足够,但是对于像中国,1个字节不足以表示所有的字符,所以在ASCII的基础上,对其进行拓展,形成了自己的字符集和编码方式。

ANSI

不同的国家地区制定了不同的标准表示自己的字符,如: 中国大陆:GBK18030 与GB2312兼容 中国台湾:BIG5 日本:SJIS

这些编码统称为ANSI编码。在简体中文系统下,ANSI编码代表的就是GB2312,而在繁体中文系统下,ANSI 代表的就是BIG5。ANSI对ASCII是兼容的,既是不同的ANSI编码对ASCII字符的码值都是一样的, 但是不同的ANSI编码之间是不兼容的(如简体中文和繁体中文是有区别的),对于纯文本来说只有一种编码方式,因此你 不能在一个ANSI编码的文本中存储不同的语言文字。例如:在ANSI编码的文本中不能既输入简体又输入繁体中文, 那么在简体中文系统中,简体中文可以正确显示,而繁体中文则是乱码;相反的,在繁体中文系统中,繁体中文可以正 确显示,而简体中文则是乱码。为了解决这个问题,就出现Unicode编码。

到底什么是ANSI,什么是UNICODE呢?

其实这是两种不同的编码方式标准,ANSI中的字符采用8bit,而

UNICODE中的字符采用16bit。8bit的ANSI编码只能表示256种字符,表示26个英文字母是绰绰有余的,但是表示 汉字,韩国语,日语等有着成千上万个字符的非西方字符肯定就不够了,正是如此才引入了UNICODE标准。Unicode 采用两个字节对所有的语言进行统一编码。Unicode编码的文本中能够存储不同国家的语言文字了。ANSI编码不行。 它对ASCII码也是兼容的。Unicode共可以表示65536个字符,但是也不够用目前是够用了,应对于将来的可能情况, 还有4个字节的Unicode编码。因此Unicode分为ucs-2和ucs-4编码。

UTF-8

UTF是通用字符编码传输格式。根据最小编码单位分为UTF-8,UTF-16,UTF-32。

UTF-8是Unicode的其中一个使用方式。UTF-8能够使不同语言和编码的文字在不同的计算机上使用,以满足跨 语言、跨平台进行文本转换、处理的要求。

开始→控制面板→日期、时间、语言和区域设置→区域和语言选项→高级下拉框中选择的是什么,ANSI就是 什么。

pageEncoding=” UTF-8” 就是指该文件保存的编码方式是:UTF-8

如果用GBK则保存文件时:用默认编码格式:ANSI.

错误的做法:指定jsp是utf-8格式的文件。保存时却是:ASNI 则运行时:静态的中文就乱码 原因:pageEncoding 指定的编码和保存的编码不一致。

同理:

因篇幅问题不能全部显示,请点此查看更多更全内容