关于web工程乱码问题-解决方案及编码习惯养成
来源:互联网 发布:天猫和淘宝什么关系 编辑:程序博客网 时间:2024/05/11 15:35
相信许多新手会和我开始时一样在web工程或者其他涉及到文件打开时会发生文字乱码,这种情况一般都是中文产生乱码,所以特别记录下乱码产生原因及解决方案。
不想了解全部流程,或只想知道如何操作解决问题直接看第三点。
在程序设计过程中经常会遇到中文乱码现象。这是程序在编写、转化、编译输出、显示过程中,中文编码设置不一致而造成的。
想要解决中文乱码现象,必须了解字符编码的过程。
一、字符从用户输入到处理保存、输出过程中使用三种编码:外码、内码、显示码
外码:作为计算机输入的键盘编码
内码:作为计算机保存时使用的编码,我们主要分析的对象。
显示码:字符显示的外观样式描述。
二、字符发展
起初,计算机字符集只有ANSI(American national standards institute)的ASCⅡ字符集,7bit表示一个字符,总计128个字符
GB2312是派生的简体中文字符集,采用双字节编码,为区分ASCⅡ字符集,所有汉字编码第一位均是1,收录汉字6763,一级汉字3755,二级3008。
由于收录汉字少,所以利用GB2312空余的编码空间,指定了GBK编码,收录汉字21003个,简繁体融于一库。并GBK并非国家正式标准。
之后产生GB18030、Unicode、UCS等字符集,在1991年前后,由Unicode和UCS两个项目参与者认识到,世界上不需要两个不同的单一字符集,于是产生了由USC实现了全世界语言文字的统一编码,这个编码也是现在大部分用的utf-8的前身,为克服UCS 等出现的缺陷,设计了UTF-8(UCS transformation Format)编码。
三、java语言中的编码实际操作
1.首先,在web中为了避免编码问题,在项目创建时设置好(文件编码)text file encoding 为UTF-8,系统默认是继承操作系统编码,这也是许多源文件在不同电脑上打开时发现注释全变成了乱码的原因。
2.其次,在web项目中静态HTML文件在浏览器输出中文乱码,在head中添加
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">3.同时,此处由于jsp文件是通过page指令 - pageEncoding属性设置传输编码,然后在后台生成HTML文件传输到前台浏览器显示,则需要在jsp文件中添加
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>4.如果涉及到传值问题,建议使用post传值,同时在表单中的输入是什么编码在获取之前使用下面方法。
反正总思想就是四个字:编码统一
request.setCharacterEncoding("utf-8");
5.对于get请求传递中文,除了指定接受数据编码外,在Tomcat的配置文件server.xml中的Connector标签中加入属性:
useBodyEncodingForURI=“true” URIEncoding=“UTF-8”还一种不推荐的方法:在接受到数据str后可使用:str = new String(str.getBytes("页面传输过来的编码"),“你需要的编码”);
6.在Cookie中传递中文
写入Cookie : java.net.URLEncoder.encode(要保存的字符);
获取Cookie :java.net.URLDecoder.decode(保存的字符);
7.RequestDispatch转向,在调用response . getWriter()前指定response编码:
response . setCharacterEncoding("UTF-8");
8.servlet中文编码
response.setContentType("text/html;charset=UTF-8");
8.还有可能web项目会与数据库交互,我使用的是MySQL,对其他数据库思路一致,在数据库中有许多编码,统一。show variables like '%character%';//查看MySQL数据库编码
character_set_client | utf8 character_set_connection | utf8 character_set_database | utf8 character_set_filesystem | binar character_set_results | utf8 character_set_server | utf8 character_set_system | utf8
注意:我的MySQL版本是5.5.55 ,并且MySQL中UFT-8字符集是没有一杠的:utf8.
以上是全部思路,楼主水平有限,如有问题还望指出。
- 关于web工程乱码问题-解决方案及编码习惯养成
- 工程字符编码ANSI_X3.4-1968乱码错误及解决方案
- 养成编码好习惯
- 编码习惯养成中
- web开发中文乱码问题及解决方案
- Java web工程乱码解决方案
- 关于习惯的养成
- 小问题---要养成好的编码习惯
- Web-----乱码--编码问题
- 养成良好的编码习惯
- Mysql 的字符编码机制、中文乱码问题及解决方案
- Web乱码问题缘由及解决方案(图形展现)
- Java Web项目中文乱码问题及解决方案剖析
- 解决Web工程乱码问题
- 解决Web工程乱码问题
- 关于javascript URL 传递参数乱码的问题及解决方案。
- 关于javascript URL 传递参数乱码的问题及解决方案。
- 养成好的JAVA编码习惯
- leetcode---restore-ip-addresses---dfs
- 欢迎使用CSDN-markdown编辑器
- BZOJ4827: [Hnoi2017]礼物(FFT)
- Redis设置密码重启后失效的解决方案
- 视觉SLAM——第三章 Eigen几何模块Geometry使用 四元素 欧式变换矩阵
- 关于web工程乱码问题-解决方案及编码习惯养成
- 随笔记:使用java.mail.jar 实现邮件发送服务
- 鲁棒性
- eclipse插入数据到MySQL数据库时,出现中文乱码问题的解决方法
- hive数据倾斜调优
- 集合框架1,数组集合ArrayList
- EasyNVR中使用Onvif协议控制预置位
- Java序列化与反序列化
- 基于MFC的五子棋应用(四)理论