`
haouziwefe
  • 浏览: 127026 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

JSP/Servlet 中的汉字编码问题

    博客分类:
  • java
阅读更多
    <span class="apple-style-span" style="font: medium simsun; color: #000000; text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate;"><span class="apple-style-span" style="font-size: 12px; line-height: 19px; font-family: verdana, nsimsun, sans-serif;">2001 年 3 月 01 日
 
<blockquote>网上就 jsp/servlet 中 dbcs字符编码问题有许多优秀的文章和讨论,本文对它们作一些整理,并结合ibm websphere application server3.5(was)的解决方法作一些说明,希望它不是多余的。</blockquote><p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;"><a name="n10037"><span class="atitle" style="font-weight: bold; font-size: 18px; font-family: arial, sans-serif;">问题的起源</span></a>
<table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td style="line-height: 19px;"><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1"><br><img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6"></td></tr></tbody></table><table class="no-print" border="0" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td style="line-height: 19px;"><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4"><br><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td style="line-height: 19px;" valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" alt="" width="16" height="16"><br></td><td style="line-height: 19px;" align="right" valign="top"><a class="fbox" style="font-size: 12px; color: #5c81a7; line-height: 13px; font-family: verdana, nsimsun, arial, sans-serif; text-decoration: none;" href="/admin/#main">回页首</a></td></tr></tbody></table></td></tr></tbody></table><br>
<p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;"><a name="n1004c"><span class="atitle" style="font-weight: bold; font-size: 18px; font-family: arial, sans-serif;">gb2312-80,gbk,gb18030-2000 汉字字符集及 encoding</span></a>
  • 它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。
  • 编码是变长的,其二字节部分与 gbk 兼容;四字节部分是扩充的字形、字位,其编码范围是首字节 0x81-0xfe、二字节0x30-0x39、三字节 0x81-0xfe、四字节0x30-0x39。
  • 它的推广是分阶段的,首先要求实现的是能够完全映射到 unicode 3.0 标准的所有字形。
  • 它是国家标准,是强制性的。
  • </ul><p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;">现在还没有任何一个操作系统或软件实现了 gbk2k 的支持,这是现阶段和将来汉化的工作内容。 
    <table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td style="line-height: 19px;"><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1"><br><img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6"></td></tr></tbody></table><table class="no-print" border="0" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td style="line-height: 19px;"><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4"><br><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td style="line-height: 19px;" valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" alt="" width="16" height="16"><br></td><td style="line-height: 19px;" align="right" valign="top"><a class="fbox" style="font-size: 12px; color: #5c81a7; line-height: 13px; font-family: verdana, nsimsun, arial, sans-serif; text-decoration: none;" href="/admin/#main">回页首</a></td></tr></tbody></table></td></tr></tbody></table><br>
    <p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;"><a name="3"><span class="atitle" style="font-weight: bold; font-size: 18px; font-family: arial, sans-serif;">中文转码时'?'、乱码的由来</span></a>
  • byte-->unicode, 如果byte标识的字符在源代码集不存在,则得到的结果是0xfffd.<p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;">如:<span class="apple-converted-space"> </span><br>byte ba[] = {(byte)0x81,(byte)0x40,(byte)0xb0,(byte)0xa1}; new string(ba,"gb2312");
  • </ul><p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;">实际编程中,jsp/servlet 程序得到错误的汉字信息,往往是这两个过程的叠加,有时甚至是两个过程叠加后反复作用的结果. 
    <table border="0" cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td style="line-height: 19px;"><img src="http://www.ibm.com/i/v14/rules/blue_rule.gif" alt="" width="100%" height="1"><br><img src="http://www.ibm.com/i/c.gif" border="0" alt="" width="8" height="6"></td></tr></tbody></table><table class="no-print" border="0" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td style="line-height: 19px;"><img src="http://www.ibm.com/i/c.gif" alt="" width="100%" height="4"><br><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td style="line-height: 19px;" valign="middle"><img src="http://www.ibm.com/i/v14/icons/u_bold.gif" border="0" alt="" width="16" height="16"><br></td><td style="line-height: 19px;" align="right" valign="top"><a class="fbox" style="font-size: 12px; color: #5c81a7; line-height: 13px; font-family: verdana, nsimsun, arial, sans-serif; text-decoration: none;" href="/admin/#main">回页首</a></td></tr></tbody></table></td></tr></tbody></table><br>
  • 浏览器中看到的 jsp/servlet 页面中的汉字怎么都成了 ’?’ ?
  • 浏览器中看到的 servlet 页面中的汉字怎么都成了乱码?
  • java 应用程序界面中的汉字怎么都成了方块?
  • jsp/servlet 页面无法显示 gbk 汉字。
  • jsp 页面中内嵌在<%...%>,<%=...%>等tag包含的 java code 中的中文成了乱码,但页面的其它汉字是对的。
  • jsp/servlet 不能接收 form 提交的汉字。
  • jsp/servlet 数据库读写无法获得正确的内容。
  • </ul><p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;">隐藏在这些问题后面的是各种错误的字符转换和处理(除第3个外,是因为 java font 设置错误引起的)。解决类似的字符 encoding 问题,需要了解 jsp/servlet 的运行过程,检查可能出现问题的各个点。 
    </font></span>
    <span class="apple-style-span" style="font: medium simsun; color: #000000; text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate;"><span class="apple-style-span" style="font-size: 12px; line-height: 19px; font-family: verdana, nsimsun, sans-serif;"><p> 
     
    <p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;">运行于java 应用服务器的 jsp/servlet 为 browser 提供 html 内容,其过程如下图所示:<br><span class="apple-converted-space"> <img src="http://www.ibm.com/developerworks/cn/java/jsp_dbcsz/image001.gif" alt="" width="807" height="181"></span><br>
  • <p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;">java 需要被编译为 .class 才能在 jvm 中执行,这个过程存在与a.同样的 file.encoding 问题。从这里开始 servlet 和 jsp 的运行就类似了,只不过 servlet 的编译不是自动进行的。对于jsp程序, 对产生的java 中间文件的编译是自动进行的(在程序中直接调用sun.tools.javac.main类). 因此如果在这一步出现问题的话, 也要检查encoding和os的语言环境,或者将内嵌在jsp java code 中的静态汉字转为 unicode, 要么静态文本输出不要放在 java code 中。 对于servlet, javac 编译时手工指定-encoding 参数就可以了。
  • [*]
  • <p style="margin-top: 0px; margin-bottom: 0px; padding-bottom: 8px; padding-top: 5px;">这是解释 url 字符 encoding 问题。如果通过 get/post 方式从 browser 返回的参数值中包含汉字信息, servlet 将无法得到正确的值。sun的 j2sdk 中,httputils.parsename 在解析参数时根本没有考虑 browser 的语言设置,而是将得到的值按 byte 方式解析。这是网上讨论得最多的 encoding 问题。因为这是设计缺陷,只能以 bin 方式重新解析得到的字符串;或者以 hack httputils 类的方式解决。参考文章 2 均有介绍,不过最好将其中的中文 encoding gb2312、 cp1381 都改为 gbk,否则遇到 gbk 汉字时,还是会有问题。 servlet api 2.3 提供一个新的函数 httpserveletrequest.setcharacterencoding 用于在调用 request.getparameter(“param_name”) 前指定应用程序希望的 encoding,这将有助于彻底解决这个问题。
  • </ul> 
    <font class="apple-style-span" style="font-weight: normal; text-indent: 0px; line-height: normal; font-style: normal; white-space: normal; letter-spacing: normal; border-collapse: separate; font-variant: normal;" size="4" color="#000000"><font class="apple-style-span" style="font-size: 12px; line-height: 19px;"> 
    </font></font></span><font class="apple-style-span" style="font-weight: normal; text-indent: 0px; line-height: normal; font-style: normal; white-space: normal; letter-spacing: normal; border-collapse: separate; font-variant: normal;" size="4" color="#000000"> 
    </font></span> 
     
    </span></p> 
     
     
     
    0
    2
    分享到:
    评论

    相关推荐

      JSPServlet 中的汉字编码问题

      ### JSP Servlet 中的汉字编码问题详解 #### 一、问题背景 在计算机科学领域,尤其是在Web开发中,字符编码问题一直是开发者面临的一个常见难题。特别是在处理非英文字符时,如中文字符,很容易遇到编码不匹配导致...

      JSP_Servlet 中的汉字编码问题.pdf

      ### JSP/Servlet中的汉字编码问题详解 #### 一、问题背景及重要性 在互联网技术的发展历程中,字符编码一直是影响多语言支持的关键因素之一。对于中文等双字节字符集(DBCS)而言,正确的编码处理尤为重要。《JSP_...

      JSP Servlet 中的汉字编码问题

      JSP Servlet 中的汉字编码各种问题解决方法

      JSP-Servlet中的汉字编码问题-JSP教程

      #### 三、JSP/Servlet汉字编码问题概述 在JSP和Servlet环境下处理汉字时,常见的问题包括但不限于以下几点: 1. **字符集不匹配导致乱码**:客户端提交的数据与服务器处理数据时所使用的字符集不同。 2. **页面...

      JSP与Servlet中的汉字编码问题.pdf

      JSP与Servlet中的汉字编码问题.pdf

      JSP、SERVLET_中的汉字编码问.txt

      ### JSP与SERVLET中的汉字编码问题解析 #### 概述 在Web开发中,尤其是在使用JavaServer Pages (JSP) 和 Servlets 进行网页动态内容生成时,经常遇到的一个问题是汉字(或者更广泛地说是中文字符)的编码处理。这...

      JSP和Servlet 中的汉字编码(乱码)问题

      该文档提出了解决jsp开发中常见的汉字编码乱码问题的解决方案,值得参考。

      深入剖析JSP和Servlet对中文的处理过程

      总之,理解中文字符的编码机制,以及JSP和Servlet处理编码的方式,对于解决中文乱码问题至关重要。开发者需要关注编码格式的匹配,确保数据在不同环境间正确转换,以保证应用程序的国际化和本地化功能正常运行。

      验证码组件

      环境的搭建: ... 6、如果要显示汉字验证码信息,需要把getimg.java中注释掉的汉字验证码部分释放出来,同时将数字和字符验证码部分注释。 运行注意事项: 1、注意包名的大小写情况 2、注意页面的编码问题

      关于Servlet、Jsp中的多国语言显示

      Unicode是一种全球通用的字符编码标准,能够支持世界上几乎所有的字符集,而GB2312则主要用于汉字编码,是中国大陆地区常用的一种编码方式。在Web应用中,尤其是在Servlet和JSP环境中,正确的字符编码设置至关重要,...

      深入剖析JSP和Servlet对中文的处理

      处理JSP和Servlet中的中文乱码问题是一项常见的任务,通过理解不同编码之间的区别和转换机制,开发者可以有效地避免这类问题的发生。在实践中,推荐使用UTF-8作为统一的字符编码标准,并确保在客户端和服务器端之间...

      Jsp页面中的字符编码方式与乱码解决方法[归类].pdf

      JSP页面中的字符编码方式与乱码解决方法 在 JSP/Servlet 中,字符编码方式...因此,在 JSP 中正确设置编码方式非常重要,否则可能会导致乱码的问题。同时,浏览器也需要正确地处理编码,以确保正确地显示和传输数据。

      汉字编码的问题

      【汉字编码的问题】在Web开发中是一个至关重要的主题,因为涉及到多层的编码转换和兼容性问题。在处理汉字时,编码不匹配可能导致乱码,影响用户体验和数据完整性。 首先,我们来了解一下汉字编码问题可能出现的...

      JspSmartUpload自定义编码版

      在传统的JSP文件上传过程中,由于编码不一致,尤其是遇到非ASCII字符(如汉字)时,可能会导致乱码现象,特别是出现“??”这样的替换字符。JspSmartUpload通过自定义编码方式,确保了文件名和上传数据在处理过程中...

      JSP实践之旅.exe

      Tomcat.JSP JSWDK环境安装与配置 Resin服务器平台介绍 Resin在...JSP/Servlet 中的汉字编码问题 javamail在JSP中的应用 javamail何志强篇 JDBC精要 jsp在win2k/oracle上的应用 如何用UML为JSP...

      中文编码问题.zip

      通过"中文编码问题.zip"中的实例,我们可以学习如何在实际项目中应用这些解决方案,包括在JSP、Servlet、数据库操作等场景下正确处理中文编码,从而避免乱码问题。通过实践和理解这些案例,开发者能更熟练地处理中文...

      jsp页面显示中文乱码解决.rar

      在IT行业中,尤其是在Web开发领域,字符编码问题是一个常见的挑战,特别是当涉及到多语言环境时。本主题聚焦于“jsp页面显示中文乱码解决”,这是一个典型的问题,许多开发者在处理包含中文字符的JSP页面时可能会...

    Global site tag (gtag.js) - Google Analytics