本文以 utf-8 为例
-
IDE 设置:
- Windows->Preferances ->General->Content Types->Text ->Default encoding: 填入 utf-8, 设置源文件及工程各种类型文件本身的编码。设定后Text下面的子类型大部分都随之改变,如css、html、java,但JSP还是默认以前的编码,需要进一步单独修改为utf-8
- Windows->Preferances ->General->Workspace->Text file encoding 在othe中选择utf-8,这是设置源文件本身的存储编码。
- Windows->Preferances ->Genaral->Editors->Text Editors->Spelling >> Encoding 这是拼写检查字典所用的编码,可不管。
- Windows->Preferances ->Files and Editors 这里可以设置各种类型源文件的编码,如JSP ->Encoding 设置为:ISO 10646/Unicode(UTF-8),这个和2的作用应该一样,可能是为了兼容Eclipse的选项。Eclipse 对应选项为 Preferances->web
-
项目设置:
右键单击项目->Properties->Resource->Text file encoding :这个默认的是上面IDE-2中所设置。如果默认不是UTF-8,则要点击Other进行选择。也可以对某个具体文件进行右键修改操作。
代码
-
JSP页面中显示的编码
<%@ page language="java" pageEncoding="utf-8"%> <%@ page contentType="text/html;charset=utf-8"%> <meta http-equiv="Content-Type" content="text/html charset=utf-8">
- 第一行 pageEncoding="UTF-8" 是指JSP页面存储时的编码。
- 第二行 charset=utf-8 指JSP页面输入输出使用的编码,也就是解码所用格式,如果不指定就用默认的iso8859-1。很多服务器在没有找到pageEncoding时,将charset代替pageEncoding
- 第三行 charset=utf-8 指定浏览器的解码方式,如果前面指定编码一致且无误,这里可以不设置,如果没有第二行,则需要设置此编码。
如果表单输入是中文,提交的时候,doPost 处理函数中 request.getParameter("xxx") 取得的可能是乱码,解决方法有两种:
- JSP头部加上
<%request.setCharacterEncoding("utf-8");%>
- request.getParameter("xxx") 前面加一句 setCharacterEncoding,即
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String name = request.getParamete("name"); // ..... }
另外注意:MyEclipse (我用的是 2017 stable 1)新建HTML时,如果选择HTML5 ,无论怎么设置编码,中文还是会乱码。自动生成的 Meta如下:
<meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8">
解决方法是 将 name 改为 http-equiv. 可以只修改第三行。
另外有两篇博文可以参考: http://peter8015.iteye.com/blog/1954379
http://www.cnblogs.com/chengkai/articles/2171848.html