关于程序中乱码解决方案下:乱码解决篇
2016-08-27 13:07
267 查看
乱码的种类有三种
* 数据存储之后的乱码
* 数据展示过程中的乱码
* 数据传递过程中的乱码
6、关于数据存储过程中的乱码:
* 数据存储之后的乱码: 数据最终保存到数据库表中的时候,表中的数据有乱码现象。
* 怎么解决这个问题呢?
- 先查看在执行insert语句之前是否是乱码,如果是乱码,先解决保存之前的乱码问题。
- 执行insert语句之前不是乱码,保存之后出现乱码,那可能是数据库表本身不支持简体中文。
7、数据展示过程中的乱码?
* 服务器端的程序响应中文到浏览器,出现乱码:
response.setContentType("text/html;charset=UTF-8"); 为什么编写UTF-8呢?
out.print("中文");
工作区的编码方式采用UTF-8,说明这里的“中文”这两个字也是采用UTF-8的编码方式,
这时采用charset=UTF-8的方式响应到浏览器上,不会出现乱码。
工作区的编码方式采用GBK,说明这里的“中文”这两个字也是采用GBK的编码方式,
应该编写这样的代码不会出现中文乱码:
response.setContentType("text/html;charset=GBK");
* 在myeclipse中编写html文件,假设工作区现在使用的是UTF-8的编码方式,并且在html文件中并没有编写:<meta charset="UTF-8">
此时,浏览器访问该html页面的时候,中文出现乱码,因为浏览器在简体中文的操作系统当中,浏览器默认采用GBK的方式展示HTML页面。怎么解决这个问题,包括两种
方式:
第一种方式:将工作区的字符编码方式设置为GBK
第二种方式:在HTML文件当中添加:<meta charset="UTF-8">
8、数据传递过程中的乱码?
* 数据传递过程中的乱码:浏览器上的表单中的数据提交给服务器之后,在服务器端获取表单中数据的时候出现中文乱码问题。
Browser --(传递过程中出现乱码)-> Server
* 为什么浏览器向web服务器提交中文的时候,在服务器端获取到的中文是乱码呢?
- 浏览器向服务器提交中文的时候,中文是不能直接在网络中传送的。首先被ISO-8859-1进行编码,在网络中传送的是一串经过ISO-8859-1编码之后的数据,传送给服务器端之后,服务器将这一段ISO-8859-1编码的数据拿到,但是不知道该这段数据编码之前是哪个国家的文字,所以无法正常显示数据。
怎么解决这个数据传递过程中的乱码问题?
第一种解决方案:万能解决方案
假设现在在浏览器上使用的编码方式是UTF-8,在表单中编写了“张三”汉字,此时的“张三”汉字是采用UTF-8的编码方式。
提交表单会先将UTF-8编码方式的“张三”转换成ISO-8859-1编码方式的“张三”
传送给服务器,服务器接收到之后,先经过"ISO-8859-1"的编码方式进行“解码”还原,
还原之后再通过UTF-8的编码方式进行重新编码。
String username = request.getParameter("username");
byte[] bytes = username.getBytes("ISO-8859-1"); //解码
username = new String(bytes,"UTF-8"); //编码
UTF-8 --> ISO-8859-1 --> UTF-8
以上的UTF-8是可变的,以浏览器上使用的编码方式为准。
第二种解决方案:专门解决POST请求的中文乱码
* 无框架下编写
request.setCharacterEncoding(????);
??? 这个位置写什么:写浏览器的编码方式。
另外以上的代码只对请求体进行编码,不对请求行中的数据编码,所以不能解决GET请求的乱码问题。
另外以上代码必须在从request对象中获取数据之前设置有效。
* 框架下编写
在WEB-INF文件下配置过滤器
第三种解决方案:专门解决GET请求的中文乱码
修改CATALINA_HOME/conf/server.xml文件:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="200"/>
注意:这里的编码方式UTF-8也不能随意编写,需要和浏览器的编码方式一致。
另外:Connector标签中可以配置什么信息呢?
* 端口号 URI字符编码方式 线程数量 .....
一个web站点的默认端口号是:80端口,80端口在一个url中可以不写,默认就是80
以上的编写参考文档:CATALINA_HOME/webapps/docs/config/http.html(我的:E:/tomcat7/webapps/docs/config/http.html)
Tomcat服务器底层在实现的时候,默认情况下可支持同时200个线程并发,WEB服务器底层为了提高程序的执行效率,一般都提供了线程池技术(Thread Pool)。用户在访问的时候,实际上不会new线程,实际上是在服务器启动阶段就提前将线程new好了,放到线程池当中。
![](http://img.blog.csdn.net/20160827201355875)
图1 CATALINA_HOME/webapps/docs/config/http.html页面
9、怎么保证不出现乱码?
只能说是尽量避免出现乱码,在项目开发过程中统一采用统一编码方式,凡是涉及到编码方式的统一都用UTF-8.
希望对你有帮助,祝你有一个好心情,加油!
* 数据存储之后的乱码
* 数据展示过程中的乱码
* 数据传递过程中的乱码
6、关于数据存储过程中的乱码:
* 数据存储之后的乱码: 数据最终保存到数据库表中的时候,表中的数据有乱码现象。
* 怎么解决这个问题呢?
- 先查看在执行insert语句之前是否是乱码,如果是乱码,先解决保存之前的乱码问题。
- 执行insert语句之前不是乱码,保存之后出现乱码,那可能是数据库表本身不支持简体中文。
7、数据展示过程中的乱码?
* 服务器端的程序响应中文到浏览器,出现乱码:
response.setContentType("text/html;charset=UTF-8"); 为什么编写UTF-8呢?
out.print("中文");
工作区的编码方式采用UTF-8,说明这里的“中文”这两个字也是采用UTF-8的编码方式,
这时采用charset=UTF-8的方式响应到浏览器上,不会出现乱码。
工作区的编码方式采用GBK,说明这里的“中文”这两个字也是采用GBK的编码方式,
应该编写这样的代码不会出现中文乱码:
response.setContentType("text/html;charset=GBK");
* 在myeclipse中编写html文件,假设工作区现在使用的是UTF-8的编码方式,并且在html文件中并没有编写:<meta charset="UTF-8">
此时,浏览器访问该html页面的时候,中文出现乱码,因为浏览器在简体中文的操作系统当中,浏览器默认采用GBK的方式展示HTML页面。怎么解决这个问题,包括两种
方式:
第一种方式:将工作区的字符编码方式设置为GBK
第二种方式:在HTML文件当中添加:<meta charset="UTF-8">
8、数据传递过程中的乱码?
* 数据传递过程中的乱码:浏览器上的表单中的数据提交给服务器之后,在服务器端获取表单中数据的时候出现中文乱码问题。
Browser --(传递过程中出现乱码)-> Server
* 为什么浏览器向web服务器提交中文的时候,在服务器端获取到的中文是乱码呢?
- 浏览器向服务器提交中文的时候,中文是不能直接在网络中传送的。首先被ISO-8859-1进行编码,在网络中传送的是一串经过ISO-8859-1编码之后的数据,传送给服务器端之后,服务器将这一段ISO-8859-1编码的数据拿到,但是不知道该这段数据编码之前是哪个国家的文字,所以无法正常显示数据。
怎么解决这个数据传递过程中的乱码问题?
第一种解决方案:万能解决方案
假设现在在浏览器上使用的编码方式是UTF-8,在表单中编写了“张三”汉字,此时的“张三”汉字是采用UTF-8的编码方式。
提交表单会先将UTF-8编码方式的“张三”转换成ISO-8859-1编码方式的“张三”
传送给服务器,服务器接收到之后,先经过"ISO-8859-1"的编码方式进行“解码”还原,
还原之后再通过UTF-8的编码方式进行重新编码。
String username = request.getParameter("username");
byte[] bytes = username.getBytes("ISO-8859-1"); //解码
username = new String(bytes,"UTF-8"); //编码
UTF-8 --> ISO-8859-1 --> UTF-8
以上的UTF-8是可变的,以浏览器上使用的编码方式为准。
第二种解决方案:专门解决POST请求的中文乱码
* 无框架下编写
request.setCharacterEncoding(????);
??? 这个位置写什么:写浏览器的编码方式。
另外以上的代码只对请求体进行编码,不对请求行中的数据编码,所以不能解决GET请求的乱码问题。
另外以上代码必须在从request对象中获取数据之前设置有效。
* 框架下编写
在WEB-INF文件下配置过滤器
<!-- 表单提交POST中文乱码解决方案统一字符编码为UTF-8 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)</span>
第三种解决方案:专门解决GET请求的中文乱码
修改CATALINA_HOME/conf/server.xml文件:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"
maxThreads="200"/>
注意:这里的编码方式UTF-8也不能随意编写,需要和浏览器的编码方式一致。
另外:Connector标签中可以配置什么信息呢?
* 端口号 URI字符编码方式 线程数量 .....
一个web站点的默认端口号是:80端口,80端口在一个url中可以不写,默认就是80
以上的编写参考文档:CATALINA_HOME/webapps/docs/config/http.html(我的:E:/tomcat7/webapps/docs/config/http.html)
Tomcat服务器底层在实现的时候,默认情况下可支持同时200个线程并发,WEB服务器底层为了提高程序的执行效率,一般都提供了线程池技术(Thread Pool)。用户在访问的时候,实际上不会new线程,实际上是在服务器启动阶段就提前将线程new好了,放到线程池当中。
<pre name="code" class="html">import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class DemoServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //不能解决get请求乱码 //request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); System.out.println(username); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* //万能解决方案,适应GET和POST请求。但是这种解决方案编写代码太多。比较麻烦。 //获取用户名 String username = request.getParameter("username"); byte[] bytes = username.getBytes("ISO-8859-1"); username = new String(bytes,"UTF-8"); System.out.println(username); */ //有效 request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); //无效 //request.setCharacterEncoding("UTF-8"); System.out.println(username); } }
图1 CATALINA_HOME/webapps/docs/config/http.html页面
9、怎么保证不出现乱码?
只能说是尽量避免出现乱码,在项目开发过程中统一采用统一编码方式,凡是涉及到编码方式的统一都用UTF-8.
希望对你有帮助,祝你有一个好心情,加油!
相关文章推荐
- Javascript与ASP.NET(一般处理程序)关于URL(get方式)传递中文乱码问题的解决方案
- 关于程序中乱码解决方案上:乱码理解篇
- 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)
- 关于edoc程序tomcat post提交中文乱码解决办法
- 关于Symbian,运行QT程序,读取和导入SQLITE数据库中中文,音标乱码的解决方案
- jsp乱码如何解决,给出三种以上的对应解决方案,并给出对应的程序案例;
- 关于visual stdio 2008下编译程序汉语乱码及英文全角的问题解决方法
- [置顶] 关于cmd运行java程序出现乱码情况解决办法
- 关于解决MFC中LPCTSTR以及UNICODE上乱码的方法 在某人的评论中看到的解决方案
- 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)
- 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)
- Javascript与ASP.NET(一般处理程序)关于URL(get方式)传递中文乱码问题的解决方案
- 关于Linux下Java程序乱码解决方案
- Java 关于中文乱码问题的解决方案与经验 (2)
- Java 关于中文乱码问题的解决方案与经验(转)
- Java 关于中文乱码问题的解决方案与经验 (1)
- 系统默认语言变更后程序显示乱码的解决之法
- 这是我们公司总结的一些关于中文乱码问题的一些解决方案和经验和大家分享!
- 关于BS程序开发中如何防止页面被多次提交解决方法!
- 关于"无法定位程序输入点 RtlUnhandledExceptionFilter 于动态链接库"解决方法