乱码问题思考及解决方法
一、引起乱码的原因有:
1、响应中的乱码:即显示页面上的乱码,如index.jsp显示出来时,"用户名"显示为乱码
2、表单提交时的乱码:即在表单的文本框中输入为中文的时候提交到服务出现乱码
二、针对各原因的解决思路及方法:
1、响应中的乱码:
说明:
(1).常见的编码方式:
ISO-8859-1,GB18030,GB2312,UTF-8;
(2)pageEncoding的含义:
pageEncoding表示的是该JSP页面的编码,也就是你要保存一个JSP页面,系统会以这个编码来保存(我们知道文本文件另存为的时候会弹出一个提示窗口,你细心一下就会发现原来可以选择不同的"编码"来保存),
同理,JSP文件默认保存的时候会以你设置的pageEncoding的属性值保存该JSP页面。
Eclipse中如果你设置了Window\preferences\jsp files面版上的Encoding为某一个值如GB2312,则以后新建一个JSP文件的时候系统会自动加上pageEncoding="GB2312"这一属性。
注意:pageEncoding="ISO-8859-1"的时候是不能保存中文的,就是说如果你设置为ISO-8859-1,但又想在JSP文件中写一段中文,保存文件的时候会提示不能保存。
(3)JSP实现过程:
客户提交URL请求如:www.WebTest.com/index.jsp
服务器接收到请求
服务器寻找本地文件index.jsp
服务器将index.jsp转译为index.java再编译为index_jsp.class文件,并将其作为响应发给客户端
客户端浏览器解释执行得到HTML代码并显示给客户
由上可见,要解决响应中的乱码问题要注意三点:
I、对本地文件index.jsp的pageEncoding属性检查,因为服务器接到请求后首先是找这个文件。pageEncoding可设为GB18030,GB2312,UTF-8
II、JSP使用 <%@ page contentType="text/html; charset=GB2312" %>为响应添加编码信息,这里如果charset="ISO-8859-1",显示出来的中文肯定是乱码。
III、记得在 <head> </head>中加入 <meta http-equiv="Content-Type" content="text/html; charset=GB2312">注意这句话应是在 <head>之后的首句话,因为有可能 <title> < /title>中使用了中文,
如果加在 </title>后,则title内容显示会出现乱码。这里的charset值最好与contentType中的charset值一致。
经过上面三步即可解决响应乱码即显示出来的页面中有乱码的情况。
2、表单提交乱码:
说明:
(1)表单的文本框中输入为中文的时候提交到服务出现乱码的主要原因是:表单提交即发送请求的过程中使用的编码是ISO-8859-1.
表单提交方式有POST和GET,所以表单提交乱码为POST乱码和GET乱码
I、POST乱码
解决方法是在JSP页面中加入语句: <% request.setCharacterEncoding("UTF-8"); %>
在web.xml中加入filter来转换所有的Post编码
II、GET乱码
POST方式下的解决方式还算简单,因为POST方式下提交的数据都是以二进制的方式附加在http请求的body部分发送,只需要在后台指定编码格式就足矣解决。
GET方式下会将参数直接附加到url后面,这部分参数无法使用request.setCharacterEncoding()处理,结果就是get形式的所有中文都变成了乱码。
这里只能对提交的内容转換成字节再转換成另一编码的字符:如下:
<%
String username = request.getParameter("username");
byte[] bytes = username.getBytes("iso-8859-1");
String result = new String(bytes, "gb2312");
out.print(result);
%>
理解起来很简单:首先我要获得与现有编码不同的编码的字符串,String类中构造函数:new String(byte[],charset ch); 那么现在我需要一个字节数组,即要对原来的字符串进行转换,从字符串变成字节数组,String类中的getBytes(charset ch)函数 所以结合起来就是:new String(username.getBytes("iso-8859-1"),"gb2312");
分享到:
相关推荐
### 部署到Linux服务器文件名乱码问题解析与解决 #### 一、问题背景与现象 在项目部署过程中,特别是在门户系统APP升级时,遇到了一个常见的问题:文件名乱码。具体表现为,在将文件从Linux服务器下载到Windows...
知识点:Servlet输出JS乱码问题解析与解决方案 一、Servlet与JS输出背景 Servlet是Java Web应用中的核心组件,主要用于处理客户端发送的HTTP请求,并生成响应。在Web开发中,Servlet经常被用来处理业务逻辑,然后...
在处理请求过程中,有时会遇到乱码问题,这主要是因为字符编码不一致导致的。以下是对Request对象和乱码解决的详细讲解。...了解和掌握各种解决乱码的策略,有助于提升开发者在实际项目中的问题解决能力。
在项目中发现这样一个问题:sqlserver数据库编码为gbk,使用python3.4+pymssql 查询,中文乱码,经过一番思考问题解决,下面把解决办法分享给大家: conn = pymssql.connect(host=192.168.122.141, port=1433, ...
### 关于Linux环境下误以为文件乱码的问题 #### 一、背景与问题...通过此次经历,不仅解决了具体的乱码和技术问题,还加深了对Linux环境、文件管理和编码处理等方面的认识,为后续类似问题的解决提供了宝贵的经验。
- **思想启发**:激发了业界对于软件开发模式和管理方法的深入思考,推动了软件工程学科的发展。 #### 三、解决乱码问题的意义 针对iPhone和iPad用户遇到的PDF乱码问题,“人月神话 iPhone/iPad 无乱码版”的发布...
给定的手册特别提到,原手册下载后存在目录乱码的问题,作者花费了约1.5小时的时间解决了这一问题。这反映出在使用Vim的过程中,有时也需要面对一些技术上的挑战,如文档的格式问题等。解决这些问题不仅可以提高手册...
总的来说,"397个解决生活中常见问题的小窍门"这个资源不仅提供了实用的生活建议,同时也让我们思考如何利用信息技术来提升生活品质,实现信息的高效管理和传播。通过数字化工具,我们可以更便捷地获取、存储和分享...
由于提供的文件内容是一年级数学上册解决问题解答应用题练习题的内容,所以知识点主要围绕着一年级的数学知识展开,以下是一些可能涉及的知识点: 1. 数字和计数:包括数字的认识(如1到100的数字),数的顺序,...
在实际的数学教学中,教师可以设计与日常生活紧密结合的数学问题,鼓励学生积极思考,将数学知识应用于解决生活中的实际问题,从而激发学生的学习兴趣,增强学生的数学应用能力。此外,家长在家也可以通过与孩子一起...
由于提供的内容信息片段中包含大量的非中文字符以及部分乱码,很难从中提取出有关“人工智能时代社会治理面临的问题及对策”的具体内容。因此,基于提供的文档内容来形成详细知识点变得不现实。 但是,根据标题和...
由于给定文件的内容部分存在乱码及OCR扫描错误,无法直接提取有效信息进行知识性解读。但是根据标题“Java程序设计课程中计算思维的培养.pdf”以及描述“Java程序设计课程中计算思维的培养.pdf”,我们可以推测该...
这类问题往往要求考生不仅仅停留在理论阐述层面,还要结合实际情况进行思考并给出具体的实施策略或解决方案。 结构化问题通常包括以下几个方面: 1. 教学设计:考生需要展示自己如何根据课程标准和学生特点设计一...
启发式教学是一种以学生为中心的教育方法,旨在通过问题解决来激发学生的思考和探索。C语言作为一种高级编程语言,是计算机科学教育的基础。在C语言的教学中运用启发式方法可以提高学生的学习兴趣和编程能力。下面...
- **项目复盘**:回顾之前参与的项目,思考可能遇到的问题和解决方法。 - **模拟面试**:进行模拟面试练习,尤其重视编程实践题目的练习。 - **了解公司背景**:研究应聘公司的业务、技术栈和文化。 - **提出问题**...
3. **培养解决问题的能力**:实习过程中,学生需要从实际出发,独立思考,这有助于培养他们发现问题、分析问题和解决问题的能力。这种能力在未来职业生涯中至关重要,无论是技术性问题还是管理层面的挑战。 4. **...
5. 如何培养学生的逻辑思维和问题解决能力,强化数据结构在提升编程能力方面的作用。 6. 教学内容的更新与课程体系的完善,确保教学内容与时俱进,并能覆盖数据分析和大数据相关的知识点。 7. 专业指导方面的建议,...
【知识点详解】 1. **计算机硬件维护**:实习过程中,涉及到的主要硬件包括...在大学实习期间,通过这些实践操作,不仅可以提升专业技能,还能培养独立思考和解决问题的能力,对于未来职业生涯有着重要的铺垫作用。
#### 二、录制Web脚本时生成的脚本中出现乱码的解决方法 当使用LoadRunner录制Web脚本时,有时会发现生成的脚本中出现了乱码的情况。这主要是由于字符编码设置不一致导致的。 **解决步骤:** 1. **打开VuGen,...