Java web项目的字符集问题
如果在Windows系统下使用eclipse开发Java应用,那么开始的时候我们一般不会考虑编码问题,但是随着不断学习,接触到前端、服务端、数据接口、数据库等更多的组件时,编码问题就逐渐暴露出来了,我们会在程序内部对编码进行转换,但是好像有时候好用有时候不好用,下面就具体解决一下这个问题
事实上所有的开发环境都是运行在操作系统上的,所以操作系统使用的默认字符集和我们开发的编码问题都有着很大的关系,但是一般是由于软件设置的问题,我们一般不会考虑操作系统的影响,大部分时候通过上层设置是可以覆盖的,但是我们必须知道操作系统作为最底层决定了应用软件的运行状态
编码的设置是有优先级的,这个应该不难发现,离应用程序越近的组件影响越大,在我们开发过程中大致优先级由低到高的顺序应该是:
操作系统默认字符集->项目环境字符集->服务器设置字符集->文件本身指定或者使用的字符集
就好比数据库一样:数据库系统的字符集->数据库字符集->数据表字符集->每一个字段的字符集这样的关系
当优先级高的字符集没有设置时,默认会使用优先级较低的字符集,无论如何操作系统总会有一个默认的字符集,当其他字符集都没设置时,那么就会使用操作系统默认的字符集,所以开发项目的时候务必要设置除操作系统之上的每一层的字符集保持一致,为了通用性推荐使用utf-8编码
在Windows系统上开发常见的一个问题就是编码问题,而Linux上这个问题却不常见,因为Windows简体中文操作系统默认编码是GBK编码或者ANSI的字符集,ANSI字符集则是随不同版本的操作系统而变化,并且不同ANSI之间也是不能通用的,就连记事本另存为utf-8编码的时候也掺杂着BOM头,所以使用Windows操作系统开发时会出现各种问题,Linux一般采用的是Unicode通用的字符集,所以通用性较好,一般不会出问题
幸好,我们没必要担心操作系统的编码问题,所有的开发项目中,我们都让应用编码覆盖操作系统的编码,这样的话,能在应用程序的层面保证编码的正确性,乱码问题也就解决了,下面大体看一下eclipse的编码设置:
在Windows上运行eclipse默认的项目编码是Windows操作系统的编码也就是GBK编码,文件编码比如xml和jsp编码默认是ISO-8859-1,西欧字符集只支持英文输入,当我们保存中文时也会提示我们是不是要保存为UTF-8,点击确定后也会保存成utf-8,下面我们自己来设置项目和文件的编码
首先,单击菜单栏"Window"选择"Preferences"
然后在左侧选择General->Workspace,右侧会看到Text file encoding选项,这里默认是Default:GBK编码,我们选中Other 选择UTF-8编码
然后,单击"OK"按钮,完成设置,现在我们就设置好了工作空间的编码,就是我们以后的开发环境下所有文件,如果没有指定,那么都将统一是utf-8编码的,这就是符合上面的优先级的原则
当然我们还可以对项目,目录,单个文件的编码进行设置,比如我们在项目管理器中对需要设置的对象上面右击,选择"Properties"
然后左侧默认是Resource,右侧我们看到Text file encoding下面选中的是Inherited from container (UTF-8),意思是默认继承自容器编码,因为上一步我们设置工作空间为UTF-8编码,所以这里如果我们不指定编码那么将会继承容器编码
好的,那么同理我们可以根据优先级的原则,指定目录编码,包编码,每一个文件编码,当然推荐全部继承于工作空间编码,并设置为utf-8的编码,这样所有的文件保存在硬盘上都是纯utf-8编码,这样就设置好了java web的字符集
通常我们在开发中,指定工作空间编码和所有文件编码都统一后,数据库,数据表,连接数据库的指定编码都要全部保持统一,个别需要转换的地方单独转换即可,另外页面声明的编码也要全部统一,这样的话浏览器能应用程序都可以正确的识别并解析,
服务器编码一般我们都会注释掉,就是说全部以文件本身传递的编码为默认编码,比如Nginx、Apache一般都是注释的当然如果要设置也必须设置为统一的,这样服务器才能正常运行应用程序
最后是程序运行的编码,这个一般也是注释的,比如java是服务器交给jre环境去运行,php是服务器交给php模块去执行,那么这些编码如果设置也必须在配置文件中统一,另外对于java编译的过程,eclipse会根据项目设置编码去编译,但是如果使用cmd命令编译的话会出现无法映射的情况,这就是命令行默认使用操作系统编码GBK来进行编译,所以会报错,这个时候我们执行编译的命令时应该给编译器指定编码:
比如:javac -encoding UTF-8 xxx.java这样编译问题就解决了
最后,我们只要对项目整体每个层次的字符集保持一致,都弄清楚,从本质上分析问题,那么编码问题就可以彻底解决了
Java web项目的字符集问题的更多相关文章
- Ubuntu部署Java web项目
登录服务器和给服务器传输文件,使用的工具是Xshell Xftp Mysql 安装mysql 输入:sudo apt-get update 更新软件列表 输入: ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- JAVA WEB项目中各种路径的获取
JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报 分类: JAVA开发(41) 1.可以在s ...
- 怎么将java web 项目导入idea 中
1.将 java web 项目导 入idea 中, 显示 然后进行 Configure 配置. 2. 点击 open module settings. 3. 4. 选择jar包. 5. 6. 配置to ...
- 在cmd命令行使用Maven Archetype插件 generate命令创建简单的java web项目
前提: 1.下载apache-maven:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache ...
- Java Web项目报错java.lang.NullPointerException at org.apache.jsp.front.index_jsp._jspInit(index_jsp.java:30)
环境:myeclipse+tomcat6+jdk6 今天搭建了一个Java Web项目,访问index.jsp时报如下错误: 严重: Servlet.service() for servlet jsp ...
- 使用Spring Boot来加速Java web项目的开发
我想,现在企业级的Java web项目应该或多或少都会使用到Spring框架的. 回首我们以前使用Spring框架的时候,我们需要首先在(如果你使用Maven的话)pom文件中增加对相关的的依赖(使用 ...
- Linux(Centos)之安装tomcat并且部署Java Web项目
1.准备工作 a.下载tomcat linux的包,地址:http://tomcat.apache.org/download-80.cgi,我们下载的版本是8.0,下载方式如图: b ...
- 阿里云部署Java web项目初体验(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在 ...
随机推荐
- Luncene 学习入门
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目. 其功能非常的强大,api也很简单.总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document ...
- 从TP、FP、TN、FN到ROC曲线、miss rate、行人检测评估
从TP.FP.TN.FN到ROC曲线.miss rate.行人检测评估 想要在行人检测的evaluation阶段要计算miss rate,就要从True Positive Rate讲起:miss ra ...
- SQL Server中,Numric,Decimal,Money三种字段类型的区别
都是精确数据类型, 前两个可以自己定义长度和小数位数, Money的定义相当于Numric(19,4) numeric(10,2) 表示最大可以放10位数,但这10位数里有2位是小数如: 123456 ...
- Php学习之SESSION反序列化机制
在php.ini中存在三项配置项:session.save_path="" --设置session的存储路径session.save_handler="" -- ...
- block中防止循环引用的一个高大上的宏定义
看惯了什么tempSelf weakSelf,来点高大的 #define weakify(...) \ rac_keywordify \ metamacro_foreach_cxt(rac_weaki ...
- js ajax 向后台传递数组
//定义数组 var _arrays = []; for (var i = 0; i < 10; i++) { _arrays.push(i); } //post $.post(href, {l ...
- Mongodb c#增删改查
写在前面 最近项目需要,就研究了下mongodb,也是为了快速上手,就自己弄了一个简单的例子,这里记录一下. Mongodb 传统的关系数据库一般由数据库(database).表(table).记录( ...
- [Winform]DataGridView列自适应宽度
引言 在做winform项目中,数据控件DataGridView的使用多多少少是会用到的,如果不设置它的属性,默认情况下是不会自适应宽度的,你想查看某项的数据,就不得不将标题栏拖来拖去,挺烦的. 方法 ...
- 繁华模拟赛 Evensgn的债务
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- QQ微信与智能家电连接一起 小马哥"连接一切"野心凸显
昨日,彭博社对于海南举行的腾讯全球合作伙伴大会进行了报道,文章指出腾讯公司正在发力移动端,将其即时通讯工具QQ和微信与烤箱.电视.空调等其他家电连接在一起.小马哥"连接一切"的野心 ...