注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研后台技术中心的博客

 
 
 
 
 

日志

 
 

java、jsp、servlet编码问题(编码分析)  

来自yfkscu@126   2013-09-13 10:30:43|  分类: 开发技巧 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
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) 

  评论这张
 
阅读(592)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017