JSP技巧:从原理上解决Tomcat中文问题

js|技巧|解决|问题|中文

  很多开源软件都有国际化和本地化的问题,其实国际化本没有那么复杂,只是总有些公司希望通过拒绝国际标准来提高市场占有率,所以也就渐渐导致了现在的情况。很多开源软件首要支持的便是UTF编码,然后才是其他编码。(by gashero)当然也有些不着调的软件首选的是ISO-8859-1编码,甚至是ASCII编码。好了,下面先讲讲编码,因为Tomcat也是一种不着调的软件。

  常见的中文编码有GB2312、GBK、GB18030等等,当然没有包括繁体中文,这些编码都是表示编码,而并非是显示编码。现在越来越多的软件,在其核心使用的显示编码或者说处理编码,是Unicode编码。Unicode编码使用2字节表示了世界上几乎所有的文字符号,作软件的内部国际化处理再适合不过了。

  只是有些龌龊公司,为了商业目的,对内核的Unicode编码API全部屏蔽,对外只提供本地化编码。(by gashero)比如M$公司在中文软件上就主推GBK编码。

  还有一个问题就是用C/C++编写的很老的软件,字符串结束标志是'\0',而使用Unicode的话,会无故的截断一些字符串。所以UTF-8就应运而生了,这种变长编码既可以减小字符串的体积,也可以防止阶段而传输Unicode编码。

  至于传统的英文编码,最常见的就是两种。一是ASCII,这种字符集高位为0,用7位表示数据。另一种是ISO-8859-1,每个字符1字节,用8位表示一个字符。

  Tomcat的内置编码就是使用了ISO-8859-1。这也是本文最关键的一句,各种技巧的根本。

  由此可知由网页所提交的数据就需要从ISO-8859-1解码,如下是获得提交参数number的例子。

  String number=new String(request.getParameter("number").getBytes("ISO-8859-1"),"UTF-8");

  这句就成功的实现了从ISO-8859-1向UTF-8编码的转换。

  有经验的读者应该遇到过通过<jsp:param>标签传递网页间参数时出错的问题。(by gashero)接收到的字符串只要是无论如何都是一堆问号。其实这也是Tomcat内部编码所导致的。如果可以顺应Tomcat的内部编码就可以传递中文字符串了。

  比如一个页面间的内部重定向:

  <?xml:namespace prefix = jsp /><jsp:forward page="index.jsp">

  <jsp:param name="name" value="<%=new String(" % 中文参数?.getBytes(?UTF-8?),?ISO-8859-1?)>" />

  </jsp:forward>

  而在目的页面接收参数的时候也需要再次从ISO-8859-1编码转换到UTF-8编码。这样就实现了在页面之间传递中文参数。

时间: 2024-08-26 07:34:10

JSP技巧:从原理上解决Tomcat中文问题的相关文章

求助: 布署项目到远程linux上的tomcat上.布署成功后,访问不到jsp,静态资源文件也访问不到. 报404错误.

问题描述 求助:布署项目到远程linux上的tomcat上.布署成功后,访问不到jsp,静态资源文件也访问不到.报404错误.20分钟前匿名|分类:JAVA相关|浏览3次求助:布署项目到远程linux上的tomcat上.布署成功后,访问不到jsp,静态资源文件也访问不到.报404错误.项目MVC层用的是struts2,在web.xml中配置的Struts2的.如果我将web.xml文件中的struts2的配置删除掉.这时就可以访问到静态的资源文件,也可以直接访问JSP文件了.但是这样STRUTS

java web-如何用jsp实现将文件上传至Tomcat服务器上,并可以下载

问题描述 如何用jsp实现将文件上传至Tomcat服务器上,并可以下载 在做一个资源管理系统,现在需要实现将文件上传至Tomcat服务器下的并在另外的页面可以实现下载的功能,除了知道这是需要上传至Tomcat服务器下之外,什么都不会,不知道怎么实现,也不知道要怎么写代码,希望各位路过的大侠指教!!!还有一个问题就是,要怎么实现已上传文件的预览呢?原谅我是个技术渣吧...感谢大家!!! 解决方案 需要借助插件的,代码还是得自己探索的.参考下这个http://bbs.csdn.net/topics/

中文乱码-下面的jsp文件出现乱码怎么解决?

问题描述 下面的jsp文件出现乱码怎么解决? test.jsp如下: <%@page contentType=""text/html;charset=GB2312"" %> <%String name=request.getParameter(""name"");String pass=request.getParameter(""pass""); if(name==n

session-KindEditor批量图片上传,SESSION丢失!4.1.10.jsp请大神帮忙解决一下

问题描述 KindEditor批量图片上传,SESSION丢失!4.1.10.jsp请大神帮忙解决一下 后台使用的jsp,批量上传图片时session取到的值为null,如何将之前的session传到jsp后台中 String dataSource = (String)request.getSession().getAttribute(SaasConstant.DATA_SOURCE);其中SaasConstant.DATA_SOURCE是存放在session中的

java类的问题-TOMCAT 中文图片无法显示怎么解决

问题描述 TOMCAT 中文图片无法显示怎么解决 在项目中 图片带有中文参数无法显示. 该怎么解决? 图片名为:(0001)1版.fit)_f3srt.jpg 怎么解决 求大神指导~~

firefox-项目中使用kindeditor后台使用的jsp但是多图上传时session取不到值,怎么解决?急急急

问题描述 项目中使用kindeditor后台使用的jsp但是多图上传时session取不到值,怎么解决?急急急 项目中的后台使用的是jsp,上传多图时使用火狐浏览器时session取不到,用ie和chrome就没有问题,上网查资料说是用的连接池不同,我应该怎么才能在jsp后台拿到session值,请求大神帮忙 解决方案 flash发送的请求不附带cookie,需要自己配置额外的session验证信息. 如果你ie和chrome能获取到,应该用的不是flash.. 解决方案二: 看看火狐是不是禁用

Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题_java

废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String path,String filename,InputStream input) { boolean success=false; FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp

大家好,我装上的Tomcat,一启动就会出现一个Java.io.EOFException,怎么解决?

问题描述 大家好,我装上的Tomcat,一启动就会出现一个Java.io.EOFException,怎么解决? 解决方案 解决方案二:原因是tomcat对硬盘的session读取失败,彻底解决办法一下:将work下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决.解决方案三:删tomcat下的session.ser解决方案四:同意楼上意见解决方案五:会不会是版本问题解决方案六:1楼很专业啊:)解决方案七:换个版本

解决phpmyadmin中文乱码问题。。。_php技巧

解决phpmyadmin中文乱码问题... 去phpMyAdmin的根目录下,打开以下这个文件: libraries/select_lang.lib.php 1.找到有"zh-gb2312"的那一行,把'zh-gb2312' 改成 'zh-gb2312-utf-8' 为什么这样加?那是因为服务器会把没有"-utf-8"的语言过滤掉,在libraries/database_interface.lib.php 第168行,根据英文说:"为了防止混淆"