Web开发中文乱码及解决方案
来源:互联网 发布:javascript编程精粹 编辑:程序博客网 时间:2024/05/20 02:26
在搞Web开发过程中,难免会遇到中文乱码问题,常识:
所谓乱码就是由于编码和解码所用的字符集不同而引起的解析错误。
a,java语言在内存当中以unicode编码格式(字符集)来保存一个字符。
b,编码:将unicode编码格式对应的字节数组转换成
某种本地编码格式(gbk,utf-8,gb2312)对应的字节数组。
c,解码:将某种本地编码格式对应的字节数组转换成
unicode编码格式对应的字节数组。
所谓乱码就是由于编码和解码所用的字符集不同而引起的解析错误。
a,java语言在内存当中以unicode编码格式(字符集)来保存一个字符。
b,编码:将unicode编码格式对应的字节数组转换成
某种本地编码格式(gbk,utf-8,gb2312)对应的字节数组。
c,解码:将某种本地编码格式对应的字节数组转换成
unicode编码格式对应的字节数组。
servlet中:编码相关的问题及解决方式
(1)servlet如何输出中文?
a,乱码问题产生的原因
默认情况下,out.println会使用"iso-8859-1"来进行编码。
b,解决方式
response.setContentType("text/html;charset=utf-8");
当然,编码格式只要支持中文即可,比如,还可以设置为 gbk。
这行代码的作用有两个:
作用1:生成一个消息头(content-type),告诉浏览器,服务器返回的数
据类型(MIME)和编码格式
作用2:也设置了out.println在输出时使用的编码格式。
注意:这句代码必须放在PrintWriter out=requst.getWriter()之前
(2)表单有中文参数,如何处理?
a,乱码问题产生的原因
当表单提交时,浏览器会对表单中的中文使用
浏览器打开表单所在的页面时的编码格式进行编码。
b,解决方式:
方式一:
step1,要保证表单所在的页面按照指定的编码格式打开。需要在<head>中添加标签
<meta http-equiv="content-type" content="text/html;charset=utf-8">
step2,让服务器按照指定的编码格式进行解码。
request.setCharacterEncoding("utf-8");
注意:这句代码必须要放在getParameter方法之前执行
然而,以上方式只对post请求有效。对于get请求则需要另寻他方
方式二:
step1,同上。
step2,
String name = new String(name.getBytes("iso-8859-1"),"utf-8");
以下是一个实例:
(1)servlet如何输出中文?
a,乱码问题产生的原因
默认情况下,out.println会使用"iso-8859-1"来进行编码。
b,解决方式
response.setContentType("text/html;charset=utf-8");
当然,编码格式只要支持中文即可,比如,还可以设置为 gbk。
这行代码的作用有两个:
作用1:生成一个消息头(content-type),告诉浏览器,服务器返回的数
据类型(MIME)和编码格式
作用2:也设置了out.println在输出时使用的编码格式。
注意:这句代码必须放在PrintWriter out=requst.getWriter()之前
(2)表单有中文参数,如何处理?
a,乱码问题产生的原因
当表单提交时,浏览器会对表单中的中文使用
浏览器打开表单所在的页面时的编码格式进行编码。
b,解决方式:
方式一:
step1,要保证表单所在的页面按照指定的编码格式打开。需要在<head>中添加标签
<meta http-equiv="content-type" content="text/html;charset=utf-8">
step2,让服务器按照指定的编码格式进行解码。
request.setCharacterEncoding("utf-8");
注意:这句代码必须要放在getParameter方法之前执行
然而,以上方式只对post请求有效。对于get请求则需要另寻他方
方式二:
step1,同上。
step2,
String name = new String(name.getBytes("iso-8859-1"),"utf-8");
以下是一个实例:
public class HelloServlet extends HttpServlet{
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//必须要放在getParameter方法之前执行。
request.setCharacterEncoding("utf-8");
//1.读取请求参数
//getParameter方法用来依据请求的参数名(“name”) 获得参数值
String name=request.getParameter("name");
// name=new String(name.getBytes("iso-8859-1"),"utf-8");
//对post和get都有效 麻烦,一般使用上面的方法 表单的提交一般是post
System.out.println(name);
String age=request.getParameter("age");
String[] city=request.getParameterValues("city");
//2.处理请求数据
int age1=Integer.parseInt(age)+1;
String msg="<h1>你好 "+name+"你的年龄是"+age1+"</h1>";
// String msg="<h1>hello"+name+"</h1>";8
// 3.输出处理结果
//生成一个消息头(content-type),告诉浏览器,服务器返回的数据类型和编码方式,
// 此外out.println时使用此编码方式编码
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//将处理结果缓存到response对象上
out.print(msg);
for(int i=0;i<city.length;i++){
out.println("<h2>"+city[i]+"</h2>");
}
out.close();
}
}
public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//必须要放在getParameter方法之前执行。
request.setCharacterEncoding("utf-8");
//1.读取请求参数
//getParameter方法用来依据请求的参数名(“name”) 获得参数值
String name=request.getParameter("name");
// name=new String(name.getBytes("iso-8859-1"),"utf-8");
//对post和get都有效 麻烦,一般使用上面的方法 表单的提交一般是post
System.out.println(name);
String age=request.getParameter("age");
String[] city=request.getParameterValues("city");
//2.处理请求数据
int age1=Integer.parseInt(age)+1;
String msg="<h1>你好 "+name+"你的年龄是"+age1+"</h1>";
// String msg="<h1>hello"+name+"</h1>";8
// 3.输出处理结果
//生成一个消息头(content-type),告诉浏览器,服务器返回的数据类型和编码方式,
// 此外out.println时使用此编码方式编码
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
//将处理结果缓存到response对象上
out.print(msg);
for(int i=0;i<city.length;i++){
out.println("<h2>"+city[i]+"</h2>");
}
out.close();
}
}
Ajax中乱码问题:
1)发送get请求
a,产生乱码问题的原因
ie浏览器对应的ajax对象对中文参数值会使用
gbk进行编码,而其它浏览器会使用utf-8进行编码。
web服务器默认情况下,会使用iso-8859-1进行
解码。
b,解决方式
step1,使用encodeURI函数对请求地址进行编码。
该函数会对其中的中文参数值按照utf-8进行编码。
step2,让服务器统一使用utf-8进行解码。
比如,可以修改tomcat的配置文件。
conf/server.xml
对<Connector>添加URIEncoding="utf-8"。
tomcat会对所有的get请求中的参数使用utf-8进行解码。
2)发送post请求
a,产生乱码问题的原因
所有浏览器对应的ajax对象对中文参数都
使用utf-8进行编码。服务器使用iso-8859-1
进行解码。
b,解决方式,只许一步在服务器端
request.setCharacterEncoding("utf-8");
以上是网页上的乱码问题,正所谓上梁不正下梁歪,如果你通过网页得到的源数据就是乱码的,那么肯定在网页上也是乱码的。
所以要保证数据库里面的数据是正常支持中文的。
将中文数据插入数据库要注意两点:
1)数据库要支持中文,即数据库要设置正确的字符集(比如,gbk,utf-8)
create database mydb
default character set utf8;
2)jdbc驱动要能够进行正确的编码和解码:
jdbc驱动在插入中文数据时,要做编码处理;
在查询中文数据时,要做解码处理。
mysql的jdbc驱动的某些版本,不能够正确地
进行编码和解码,必须要加上两个参数:
jdbc:mysql://localhost:3306/jsd1308db?useUnicode=true&characterEncoding=utf8
此外,如果你不借助工具直接在终端进行数据的插入和修改,则也可能插入的数据出现乱码,原因是终端不能对中文进行解析。
1)发送get请求
a,产生乱码问题的原因
ie浏览器对应的ajax对象对中文参数值会使用
gbk进行编码,而其它浏览器会使用utf-8进行编码。
web服务器默认情况下,会使用iso-8859-1进行
解码。
b,解决方式
step1,使用encodeURI函数对请求地址进行编码。
该函数会对其中的中文参数值按照utf-8进行编码。
step2,让服务器统一使用utf-8进行解码。
比如,可以修改tomcat的配置文件。
conf/server.xml
对<Connector>添加URIEncoding="utf-8"。
tomcat会对所有的get请求中的参数使用utf-8进行解码。
2)发送post请求
a,产生乱码问题的原因
所有浏览器对应的ajax对象对中文参数都
使用utf-8进行编码。服务器使用iso-8859-1
进行解码。
b,解决方式,只许一步在服务器端
request.setCharacterEncoding("utf-8");
以上是网页上的乱码问题,正所谓上梁不正下梁歪,如果你通过网页得到的源数据就是乱码的,那么肯定在网页上也是乱码的。
所以要保证数据库里面的数据是正常支持中文的。
将中文数据插入数据库要注意两点:
1)数据库要支持中文,即数据库要设置正确的字符集(比如,gbk,utf-8)
create database mydb
default character set utf8;
2)jdbc驱动要能够进行正确的编码和解码:
jdbc驱动在插入中文数据时,要做编码处理;
在查询中文数据时,要做解码处理。
mysql的jdbc驱动的某些版本,不能够正确地
进行编码和解码,必须要加上两个参数:
jdbc:mysql://localhost:3306/jsd1308db?useUnicode=true&characterEncoding=utf8
此外,如果你不借助工具直接在终端进行数据的插入和修改,则也可能插入的数据出现乱码,原因是终端不能对中文进行解析。
0 0
- Web开发中文乱码及解决方案
- web开发中文乱码问题及解决方案
- JAVA,web开发,中文乱码解决方案MyTools
- WEB中文乱码解决方案
- web 中文乱码解决方案
- Web中文乱码解决方案
- Java Web项目中文乱码问题及解决方案剖析
- java web 开发中文乱码的一般解决方案
- web开发中文乱码各种解决方案大总结
- Java Web开发下载文件,文件名中文乱码解决方案
- web开发中关于中文乱码的解决方案
- WEB开发常见的中文乱码情况及其解决方案
- JSP开发过程遇到的中文乱码问题及解决方案
- JSP开发过程遇到的中文乱码问题及解决方案
- JSP开发过程遇到的中文乱码问题及解决方案
- JSP开发过程遇到的中文乱码问题及解决方案
- JSP开发过程遇到的中文乱码问题及解决方案
- java中文乱码及解决方案
- 无插件Vim编程技巧
- Standard LPN check Sql
- Python学习第1节(win7编译环境搭建和第一个程序)
- POJ-1475-Pushing Boxes(BFS)
- public Session session()
- Web开发中文乱码及解决方案
- 最大子序列和问题
- Effective Java读书笔记(第3章-对于所有对象都通用的方法)
- Sevlet+Ajax+jQuery学习总结
- Java类加载的顺序
- POJ-1324-Holedox Moving(BFS)
- Library drmframework_jni not found
- yum错误无法解决
- hdu 1588 Gauss Fibonacci(矩阵嵌矩阵)