`
tianmingqi
  • 浏览: 117588 次
  • 性别: Icon_minigender_1
  • 来自: 河南郑州
社区版块
存档分类
最新评论

通过表单get方法,或使用<a href....>提交汉字参数的乱码问题

阅读更多

在struts2.0中,把所有编码设置为utf-8,表单使用post方法提交,在服务器端取得的汉字数据不会出现乱码。

但是如果使用get方法提交,就会出现编码。

开始认为:以后全使用post方法不就行了嘛!

但是又遇到了这样的情况:

<a href="test.action?name='你好'">链接</a>

如果使用这样的方法提交参数与使用get方法提交表单是一样的,参数都会在地址栏中显示,如下:

http://localhost:8080/test/test.action?name=%E4%BD%A0%E5%A5%BD

 

 

但是这个中文参数在服务器端显示是乱码的。可以使用以下处理将其不乱码,下面是一个具有汉字与型如“%E4%BD%A0%E5%A5%BD ”相互转换的工具类:

package com.shiyihr.util;

public class CodingUtil {
	//将汉字转换为%E4%BD%A0%E5%A5%BD形式
	public static String toUtf8String(String s) {    
	          StringBuffer sb = new StringBuffer();    
	          for (int i = 0; i < s.length(); i++) {    
	                  char c = s.charAt(i);    
	                  if (c >= 0 && c <= 255) {    
	                          sb.append(c);    
	                  } else {    
	                          byte[] b;    
	                          try {    
	                                  b = String.valueOf(c).getBytes("utf-8");    
	                          } catch (Exception ex) {    
	                                  System.out.println(ex);    
	                                  b = new byte[0];    
	                          }    
	                          for (int j = 0; j < b.length; j++) {    
	                                  int k = b[j];    
	                                  if (k < 0)    
	                                          k += 256;    
	                                  sb.append("%" + Integer.toHexString(k).toUpperCase());    
	                          }    
	                  }    
	          }    
	          return sb.toString();    
	  }    
	   
	//将%E4%BD%A0%E5%A5%BD转换为汉字    
	 public static String unescape(String s) {    
	            StringBuffer sbuf = new StringBuffer () ;    
	            int l  = s.length() ;    
	            int ch = -1 ;    
	            int b, sumb = 0;    
	            for (int i = 0, more = -1 ; i < l ; i++) {    
	              /* Get next byte b from URL segment s */   
	              switch (ch = s.charAt(i)) {    
	                case '%':    
	                  ch = s.charAt (++i) ;    
	                  int hb = (Character.isDigit ((char) ch)     
	                            ? ch - '0'    
	                            : 10+Character.toLowerCase((char) ch) - 'a') & 0xF ;    
	                  ch = s.charAt (++i) ;    
	                  int lb = (Character.isDigit ((char) ch)    
	                            ? ch - '0'    
	                            : 10+Character.toLowerCase ((char) ch)-'a') & 0xF ;    
	                  b = (hb << 4) | lb ;    
	                  break ;    
	                case '+':    
	                  b = ' ' ;    
	                  break ;    
	                default:    
	                  b = ch ;    
	              }    
	              /* Decode byte b as UTF-8, sumb collects incomplete chars */   
	              if ((b & 0xc0) == 0x80) {                        // 10xxxxxx (continuation byte)    
	                sumb = (sumb << 6) | (b & 0x3f) ;        // Add 6 bits to sumb    
	                if (--more == 0) sbuf.append((char) sumb) ; // Add char to sbuf    
	              } else if ((b & 0x80) == 0x00) {                // 0xxxxxxx (yields 7 bits)    
	                sbuf.append((char) b) ;                        // Store in sbuf    
	              } else if ((b & 0xe0) == 0xc0) {                // 110xxxxx (yields 5 bits)    
	                sumb = b & 0x1f;    
	                more = 1;                                // Expect 1 more byte    
	              } else if ((b & 0xf0) == 0xe0) {                // 1110xxxx (yields 4 bits)    
	                sumb = b & 0x0f;    
	                more = 2;                                // Expect 2 more bytes    
	              } else if ((b & 0xf8) == 0xf0) {                // 11110xxx (yields 3 bits)    
	                sumb = b & 0x07;    
	                more = 3;                                // Expect 3 more bytes    
	              } else if ((b & 0xfc) == 0xf8) {                // 111110xx (yields 2 bits)    
	                sumb = b & 0x03;    
	                more = 4;                                // Expect 4 more bytes    
	              } else /*if ((b & 0xfe) == 0xfc)*/ {        // 1111110x (yields 1 bit)    
	                sumb = b & 0x01;    
	                more = 5;                                // Expect 5 more bytes    
	              }    
	              /* We don't test if the UTF-8 encoding is well-formed */   
	            }    
	            return sbuf.toString() ;    
	          }  
}

 

 

分享到:
评论
1 楼 yajie 2009-05-20  
顶你个费,在你那适用,别的地方就不行了。
encoding--
escape:????
unescape:
gettting--------->k=????
POST--escape:????
POST--unescape:
encoding:UTF-8
未编码前:????
自动编码:????
强制编码:????
-次编码后:????
二次编码后:????

相关推荐

    js效果页面实例及说明文档包html版

    绝对的经典javascript收藏 包含了各个种类的js校验实例&lt;br&gt;web开发绝妙帮手&lt;br&gt;&lt;br&gt;javascript收藏 &lt;br&gt;1....局部刷新 &lt;br&gt;2.javascript模拟HashMap类 &lt;br&gt;&lt;br&gt;Web测试过程中前台通用问题 &lt;br&gt;说明文档下载 &lt;br&gt; &lt;br&gt;

    jsp编程技巧集锦

    数字转中文&lt;br&gt;128 自动计算金额&lt;br&gt;129 JSP页面打印中使用WebBrowser控件&lt;br&gt;130 &lt;select...&gt;不刷新页面添加新的类别&lt;br&gt;131 鼠标滚动缩放图片&lt;br&gt;132 根据输入的表名生成输入数据表格&lt;br&gt;133 JSP表格输出到Excel...

    一个小巧妙的统计程序

    7.数据录入模块的设计方法,按钮屏蔽的方法.&lt;br&gt; &lt;br&gt; 8.数据查找中有重复值的查找方法.&lt;br&gt; &lt;br&gt; 9.随机函数的运用--在程序中表现为随机抽奖功能.&lt;br&gt; &lt;br&gt; 10.数据打印的方法.&lt;br&gt; &lt;br&gt; 说明:程序下载后可直接在VF...

    基于JSP的办公自动化系统

    会议&lt;br&gt;&lt;br&gt; 发文:拟稿、审核、会签、签发、归档、发布&lt;br&gt;&lt;br&gt; 收文:登记、传阅、审批、归挡、发布&lt;br&gt;&lt;br&gt; 会议:作者中心审批模式&lt;br&gt;&lt;br&gt; 月报:办理人中心审批模式&lt;br&gt;&lt;br&gt; 普通办件:作者中心审批模式&lt;br&gt;...

    ajax实例大全 很实用的!

    &lt;tr&gt;&lt;td&gt;&lt;a href="7.4/slider.html"&gt;7.4使用滑动栏设置参数&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td class="item"&gt;第八章 访问第三方服务&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="8.1/read_rss.html"&gt;8.1RSS阅读器&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a ...

    java应用软件程序设计

    ReadTestquestion&lt;br&gt;7.5. 课程设计作业&lt;br&gt;第8章 日历记事本&lt;br&gt;8.1. 设计内容&lt;br&gt;8.2. 设计要求&lt;br&gt;8.3. 总体设计&lt;br&gt;8.4. 具体设计&lt;br&gt;8.4.1. 运行效果与程序发布&lt;br&gt;8.4.2. 主类CalendarPad&lt;br&gt;8.4.3. 记事本...

    一个非常强大完整的web表单验证程序

    表单的验证一直是网页设计者头痛的问题,表单验证类 Validator就是为解决这个问题而写的,旨在使设计者从纷繁复杂的表单验证中解放出来,把精力集中于网页的设计和功能上的改进上。 &lt;br&gt;&lt;br&gt; Validator是基于...

    FORM表单中文乱码问题分析与解决

    针对FROM表单传递参数中的中文乱码问题进行分析并提出解决方法

    Javascript表单验证控件(Validator v1.05).rar

    --------------------------------&lt;br&gt;(如果有需要,我会另外把prototype的相关代码及使用开发手册也发上来)&lt;br&gt;---------------------------------&lt;br&gt;具体简介如下:&lt;br&gt;表单的验证一直是网页设计者头痛的问题,...

    extjs 前后台交互参数出现中文乱码问题的解决方法

    在使用myeclipse过程中,我使用ajax同步请求传递参数到后台却出现中文乱码,这是我解决问题的代码,希望对您有所帮助

    smartupload上传组件3个版本打包

    包括三个版本+相关实例&lt;br&gt;&lt;br&gt;jspsmartupload-javaword的.jar&lt;br&gt;smartupload-CSDN的.jar&lt;br&gt;smartUpload-据说是修正中文错误.jar&lt;br&gt;=======================================================&lt;br&gt;在JSP 中上传...

    asp.net技术内幕(1)

    使用ADO.NET&lt;br&gt;&lt;br&gt;第9章 ADO.NET简介 &lt;br&gt;&lt;br&gt;9.1 ADO.NET概述 &lt;br&gt;9.2 执行常见的数据库任务 &lt;br&gt;9.2.1 打开数据库链接 &lt;br&gt;9.2.2 从数据库表获取记录 &lt;br&gt;9.2.3 在查询中使用参数 &lt;br&gt;9.2.4 向数据库添加记录 ...

    asp.net技术内幕(2)

    使用ADO.NET&lt;br&gt;&lt;br&gt;第9章 ADO.NET简介 &lt;br&gt;&lt;br&gt;9.1 ADO.NET概述 &lt;br&gt;9.2 执行常见的数据库任务 &lt;br&gt;9.2.1 打开数据库链接 &lt;br&gt;9.2.2 从数据库表获取记录 &lt;br&gt;9.2.3 在查询中使用参数 &lt;br&gt;9.2.4 向数据库添加记录 ...

    asp.net技术内幕(5)

    使用ADO.NET&lt;br&gt;&lt;br&gt;第9章 ADO.NET简介 &lt;br&gt;&lt;br&gt;9.1 ADO.NET概述 &lt;br&gt;9.2 执行常见的数据库任务 &lt;br&gt;9.2.1 打开数据库链接 &lt;br&gt;9.2.2 从数据库表获取记录 &lt;br&gt;9.2.3 在查询中使用参数 &lt;br&gt;9.2.4 向数据库添加记录 ...

    asp.net技术内幕(4)

    使用ADO.NET&lt;br&gt;&lt;br&gt;第9章 ADO.NET简介 &lt;br&gt;&lt;br&gt;9.1 ADO.NET概述 &lt;br&gt;9.2 执行常见的数据库任务 &lt;br&gt;9.2.1 打开数据库链接 &lt;br&gt;9.2.2 从数据库表获取记录 &lt;br&gt;9.2.3 在查询中使用参数 &lt;br&gt;9.2.4 向数据库添加记录 ...

    asp.net技术内幕(3)

    使用ADO.NET&lt;br&gt;&lt;br&gt;第9章 ADO.NET简介 &lt;br&gt;&lt;br&gt;9.1 ADO.NET概述 &lt;br&gt;9.2 执行常见的数据库任务 &lt;br&gt;9.2.1 打开数据库链接 &lt;br&gt;9.2.2 从数据库表获取记录 &lt;br&gt;9.2.3 在查询中使用参数 &lt;br&gt;9.2.4 向数据库添加记录 ...

    基于JSP的产供销管理系统

    系统设置&lt;br&gt;&lt;br&gt;&lt;br&gt;完整的企业生产、采购、库存、销售、业务往来业务处理.&lt;br&gt;&lt;br&gt;主要流程有:采购流程、生产流程、销售流程 从客户订单开始到产品生产,再到产品销售和货款结算.&lt;br&gt;&lt;br&gt;1.采购业务流:&lt;br&gt;&lt;br&gt;1.1...

    Java Struts教程

    INF后以保护JSP源代码............................................................................21&lt;br&gt;使用 Prebuilt Action类提升开发效率...................................................................

    O-Blog v2.5 Beta Build 0812 繁体中文版

    全新采用 XHTML 界面,通过W3C验证&lt;br&gt;3.功能更加强大的后台管理&lt;br&gt;4.全新的后台界面&lt;br&gt;5.完善的评论审核机制&lt;br&gt;5.模板引擎采用 smarttemplate&lt;br&gt;6.时间显示更详细&lt;br&gt;7.安装程序自动建立数据库&lt;br&gt;9.日志置顶...

    按回车键时跳到下一个表单元素的javascript代码

    按回车键时跳到下一个表单元素的javascript代码&lt;br&gt;&lt;br&gt;函数说明:按回车键时跳到下一个表单元素&lt;br&gt;JumpToNextElement() 用于按回车键时跳到下一个表单元素(统一处理按回车键的问题)&lt;br&gt;在页面调用:&lt;br&gt;&lt;script ...

Global site tag (gtag.js) - Google Analytics