JSP中文问题浅析

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:gdutzxp
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:JSP是目前比较热门的一个话题,它继承了Java的所有优点。可是在编写JSP程序的过程中,常遇到中文乱码问题,而且使用平台不同,中文乱码问题的解决方法也不同,无形中增加了学习JSP的难度。在此,通过剖析其产生原因后,提出了相应的解决方法,并归纳出几点结论。
  关键词:JSP;中文问题;Unicode
  中图分类号: TP311 文献标识码: A文章编号:1009-3044(2008)33-1367-02
  Slight JSP Chinese problem
  HUANG Ji,JIANG Li-qun
  (College of Computer, China University of Mining and Technology, Xuzhou 221008, China)
  Abstract: JSP is a pop topic at present ,it inherited all excellence of Java .But we often meet the problem of Chinese problem ,at the time of writing JSP program, furthermore ,in different instance ,the ways of solving are different , this increase the difficulty of learning JSP. So, by analyzing the cause of it, put forward relevant solving methods, and conclude some conclusion.
  Key words:JSP; Chinese problem; Unicode
  1 JSP中文问题的由来
  Java的内核和class文件是基于Unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
  首先JSP(包括Java)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class 文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。
  其次Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,(注:从char到byte是编码的过程,反之,是解码的过程。)具体情况如下:
     Byte型         Char型
   页面form提交(数据)-> JSP程序(java程序)
   数据库(数据)   -> JSP程序(java程序)
   文件(数据)    -> JSP程序(java程序)
   流(数据)     -> JSP程序(java程序)
  如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。 为了进一步了解编码和解码之间的关系,下面我们解释一下字符编码相关知识。
  每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展ASCII码、中国的GB2312-80、日本的 JIS 等,作为该国家(区域)信息处理的基础,有着统一编码的重要作用。由于各本地字符集代码范围重叠,相互间信息交换困难,软件本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,做一致性处理,将特殊的本地化处理内容降低到最少,这就是所谓的国际化。各种语言信息被规范为本地信息,而底层字符集采用包含了所有字符的Unicode。
  字符内码(character code)指的是用来代表字符的内码。我们在输入和存储文档时都要使用内码,内码分为单字节内码和双字节内码。单字节内码的英文全称是Single-Byte Character Sets (SBCS),可以支持256个字符编码;双字节内码的英文全称是Double-Byte Character Sets(DBCS),可以支持65000个字符编码,主要用来对大字符集的东方文字进行编码。
  CodePage指的是一个经过挑选的以特定顺序排列的字符内码列表,对于早期的单字节内码的语种,CodePage中的内码顺序使得系统可以按照此列表来根据键盘的输入值给出一个对应的内码。对于双字节内码,给出的是Multiyear到Unicode的对应表,这样就可以把以Unicode形式存放的字符转化为相应的字符内码。引入对CodePage的支持主要是为了访问多语种文件名,目前在NTFS和FAT32/VFAT下的文件系统上都使用Unicode,这需要系统在读取这些文件名时动态地将其转换为相应的语言编码。
  2 解决方法
  解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,以下总结了几条解决的方法。
  2.1 对于JSP页面显示乱码
  解决的方法是:在JSP页中加入一条语句:<%@ page contentType="text/html;charset=
  gb2312" %>或<%@ page contentType="text/html; charset= GBK" %>[1]中文显示就正常了。(注:此语句必须先加入,然后输入中文,如果输入中文保存之后,再加入此语句仍可能产生乱码,因为编译时已经开始编码。)对于频繁的转换我们可以编写一个方法,以共调用,如下:
  public String getStr(String str)
  {
  try
  {
  String temp_p=str;
  byte[] temp_t=temp_p.getBytes("ISO8859_1");
  String temp=new String(temp_t,"GB2312");
  return temp;
  }
  catch(Exception e)
  { return "null";}
  }
  2.2 对于JSP页面参数之间的乱码
  JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式: request.setCharacterEncoding("GBK")或request.setCharacterEncoding ("gb2312")。如果在JSP将变量输出到页面时出现了乱码,可以通过设置response.setContentType("text/html;charset=GBK")或response.setCo
  ntentType("text/html;charset= gb2312")解决。
  2.3 对于数据库的显示乱码
  对于将中文数据写入数据库的问题,采取的方式就不同了:
  windows下,必须要采用该字符串转换再插入数据库,而Linux下就不需要,而是直接把8859_1编码的字符插入。
  如果从数据库中读出的数据,对于windows因为在插入时已经做了转换,所以读出时已经是gb2312的,当把它显示在网页上时,不需要做编码转换,而Linux上的Mysql中的数据是8859_1的所以要做编码的转换。
  2.4 对于数据库连接的乱码
  可以对中文字符进行相应的编码解码,不过,有一种比较好的方法是在连接数据库的时候指定编码(以Mysql为例):String sConnStr="jdbc:mysql://localhost/test?user=xxx
其他文献
摘要:服务器是在网络上为用户提供服务和资源的计算机。笔者从定义、功能服务等方面区别分析Web服务器与应用程序服务器的不同之处,为大家在学习服务器相关知识时提供借鉴和参考。  关键词:Web服务器;应用程序服务器  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)24-1139-01  The Different of Web Server and Application
摘要:子网掩码在网络通信中具有非常重要的作用。通过分析网络测试中常用的Ping命令所反馈的不同结果与子网掩码的关系,判断网络故障原因,进行网络定位,帮助用户深入理解子网掩码。对常见网络故障的分析、排除具有重要意义。  关键词:ping;子网掩码;网络故障  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)27-1895-02  A Diagnosis Method of
摘要:为提高师范生信息素养,该文提出了基于Big 6的培养模式。实践证明:在《多媒体课件制作》课程中运用Big 6教学模式,学生对学习任务的兴趣增强了,分析问题、解决问题的能力提高了,对信息的搜索、筛选、整合的能力也得到了一定的锻炼,对提高信息素养取得了明显的成效。  关键词:高师生;信息素养;信息素养教育;Big 6  中图分类号:TP37文献标识码:A文章编号:1009-3044(2008)2
摘要:本文详尽的分析了在中文环境下运用Apach Commons HttpClient进行编程时出现的几个常见问题。针对每个问题,本文均给出较为完善的解决方案,对中文环境下的Apach Commons HttpClient编程具有极大的现实参考价值。  关键词:Apach Commons HttpClient、程序设计、中文操作系统  中图分类号:TP393文献标识码:A文章编号:1009-304
书名:文史哲论丛(2014卷)  作者:谷建全  出版社:社会科学文献出版社  出版时间:2014年  ISBN:9787509765753  定价:58元  人文精神是人类对自身本质、尊严、价值及终极关怀的追求,是民族与国家文明程度的重要表征。河南省社会科学院谷建全主编的《文史哲论丛(2014卷)》,汇集了河南省社会科学院老中青三代学者的研究成果,其中哲学部分对国内先哲和古代哲学、近现代哲学思想
【关键词】文学经典作品,核心教育价值,《少年闰土》,统编语文教材,习题  配套习题是文选型教材的重要组成部分,它除了体现教学大纲和课程标准的要求,还体现了编写者对选文价值的判断。编写者让学生注意到作品的这些而忽略那些,引导学生从此角度而不是彼角度去关注作品,可以看出编写者对选文阐释的角度、方式和态度。这样的阐释体现了编写者的基本理念和意图,以及对教育、教学的影响。  《少年闰土》于20世纪60年代
编者按  随着中国学生核心素养发展框架的提出和学科核心素养结构的进一步明确,基础教育课程目标越来越聚焦到人的培养上来。如何在教学中落实立德树人的根本任务,如何在日常教学中更好地培养学生的语文素养,成为语文教育界关注的焦点。对此,2017版高中课标提出以“语文学习任务群”为课程的基本组织单位,以语文学科核心素养为纲,以学生的语文实践为主线,以任务为导向,以学习项目为载体,整合学习情境、学习内容、学习
摘要:μC/OS-Ⅱ由于其源代码开放、稳定、可靠的特点,在嵌入式开发中得到了广泛应用。该文针对其移植开发,探讨了这一过程中所采用的步骤、一般方法和技巧。  关键词:μC/OS-Ⅱ;嵌入式系统;移植  中图分类号:TP316文献标识码:A文章编号:1009-3044(2008)29-0493-02  Methods on Transplantation of μC/OS-II  XU Jing-fe
摘要:Multisim8是一款优秀仿真软件,使用该软件可对电路进行各种参数分析。我们在享受其便利的同时,也遇到因缺少元器件导致电路仿真无法进行的阻力。解决此问题的方法就是为元件建立仿真模型并新建或扩充已有的元器件库。在不熟悉Spice编程原理的情况下,我们可通过相关网址查找到元件厂商提供的元件模型,利用模型导入的方法来建立需要的新元件。通过对新元件应用电路的仿真分析,新元件完全符合要求。在此基础上
摘要:考试网络化已经成为未来发展的趋势,为了适应教学和管理的需要,利用ASP技术设计并开发了B/S 模式网上考试平台系统。文章详细地对考试系统的需求进行分析,对功能模块进行设计并进行了部分实现。  关键词:考试;B/S模式  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)24-1208-02  ASP-based Technology Design and Impl