您的位置:首页 > 编程语言 > Java开发

java、jsp、servlet编码问题

2014-10-14 18:52 337 查看
java程序编码
编译阶段编码
首先编写java源文件,并以一定编码保存,调用java编译器编译源文件,Javac命令行参数-encoding告诉java编译器源文件使用的编码(如果没有指定则java编译器认为java文件使用操作系统中file.encoding指定的编码),java编译器会首先把源文件从-encoding编码转换到unicode编码存储到内存中,把编译好的字节码写入class文件(class文件是utf8编码)。
执行阶段编码
jvm首先把class文件读入内存(把utf8编码的class文件直接读入内存,不进行转码),通过-Dfile.encoding参数指定输出编码格式(这个阶段会把utf-8的编码转换为输出指定的编码)。

编码总结

java的class文件是以utf8存储的,这点可以使用UE软件查看16进制编码和utf8编码得知。 java中以unicode字符编号为桥梁,进行各种编码转换,转换都是针对unicode字符编号(每一个字符都有唯一的unicode编号,范围U+0000
~ U+10FFFF为有效字符编号) int codePoint = Character.toCodePoint(char high, char low)//转换一个utf-16编码的字符到unicode编码 char[] chars = Character.toChars(int codePoint)//转换一个unicode编码到一个或者两个utf-16编码字符 

JSP编码(此处依tomcat容器作为web容器)

jsp到java文件编码转换

jsp文件会在第一次被访问的时候由jsp容器进行一次转码存储到内存中,要把用户指定的源文件编码转换成unicode编码存储到内存中。编码指定的方式依次为:pageEncoding、contentType中的charset指定编码(前面的编码会覆盖后面的编码)。用户不指定则使用默认ISO-8859-1编码。之后通过tomcat容器会生成一个对应的.java文件(这也是我们常说的servlet文件),这个java文件的编码方式由web.xml中的javaEncoding参数指定,不指定则使用默认的utf8无bom编码。

servlet输出编码转换

jsp文件生成java文件后,tomcat容器会调用java编译器会按照javaEncoding编码把.java文件读取到内存中转换为unicode编码然后编译保存成utf-8编码的.class文件,最后jvm加载.class文件,运行字节码。最后的输出编码格式指定可以由:contentType中charset或者pageEncoding指定(前面的编码会覆盖后面的编码),这个编码也就是我们jsp页面中看到的字符串的编码。如果没有指定使用默认的ISO-8859-1编码。

Servlet编码请求和响应编码指定

servlet输入编码由request.setCharacterEncoding()确定(默认为ISO-8859-1),输出编码由response.setCharacterEncoding()确定(默认为ISO-8859-1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: