关于JAVA中URL传递中文参数,取值是乱码的解决办法

今天遇到一个问题就是在Action当中把一条中文信息绑定在URL的后面,ActionForward到别一个页面时,用reqeust.getParameter取出是出现乱码的问题。

现解决办法如下:

1、对要进行URL传递的中文字符进行编码:

String message = java.net.URLEncoder.encode("中文字符","utf-8");

2、在取URL传递中文的页面对字符进行解码:

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

--------------------------------------------------------------------------------------

注 1、这里得出的str就是先前传入的"中文字符"。

      2、为什么要对取出的字符集形式转换成UTF-8形式,是因为ISO-8859-1是Java中网络传输使用的标准字符集,request.getParameter("message");得到的还是ISO-8859-1字符集,所以要转换一下。




,前几天看到有网友在问URLDecoder和URLEncoder方面的使用问题,突然想起,原来我刚遇到这两个类时,也觉得很神密,由此可以想想初学者的心情,于是便有了今天的这篇文章.
   其实,这两个类的使用并不复杂,URLDecoder和URLEncoder它的作用主要是用于普通字符串和application/x-www- form-rulencodedMIME字符串之间的转换,一般的人会以为后一个字符串比较专业,以为有什么高深的知识,其实不然.
 

    下面,我们在在"百度"中搜索"网络时空",会看到如下所示的图示

 

 


     从上图中可以看出:当我们搜索的关健字包含中文时,这些关健字就会变成如图所示的"乱码",实际上这不是乱码,这就是所谓的applicaion/x-www-form-urlencodedMIME字符串.
     当URL地址里包含非西欧字符的字符串时,系统会将这些非西欧转换成如图所示的特殊字符串,那么编码过程中可能涉及将普通字符串和这种特殊字符串的相关转换,这就是需要使用URLDecoder和URLEncoder类

     URLDecoder类包含一个decode(String s,Stringcharcter)静态方法,它可以将看上去乱码的特殊字符串转换成普通字符串
     URLEncoder类包含一个encode(String s,Stringcharcter)静态方法,它可以将普通字符串转换成application/x-www-form-urlencodedMIME字符串

     如下程序代码 
importjava.net.*;

public class URLDecoderTest
{
 public static void main(String[] args)
  throws Exception
 {
  //将application/x-www-form-urlencoded字符串
  //转换成普通字符串
  //其中的字符串直接从上图所示窗口复制过来
  String keyWord =URLDecoder.decode(
   "%CD%F8%C2%E7%CA%B1%BF%D5","UTF-8");
  System.out.println(keyWord);
  //将普通字符串转换成
  //application/x-www-form-urlencoded字符串
  String urlStr =URLEncoder.encode(
   "网络时空" ,"UTF-8");
  System.out.println(urlStr);
 }
}


    上面程序中就是普通中文字符串和application/x-www-form-urlencoded MIME字符串之间的转换.

     运行上面程序结果图示如下

 


 

 

总结:
     当URL地址中仅包含普通非中文字符串和application/x-www-form-urlencodedMIME字符串无须转换,而包含中文字符串的普通字符串则需要转换,换句话说,也就是说URL地址中有"中文字符串"传递时,才会考虑用到上面提到的两个类,这样就可以将传递过来的中文接受后,再还原成原来的中文字符串.如不转换,则通过URL传递过来的中文字符中会变成乱码,无法还原了

(本文参考了疯狂JAVA讲义)

转载于:https://my.oschina.net/u/187191/blog/129159

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java,我们可以使用循环来实现对实体参数取值。 首先,我们需要定义一个实体类,该类包含我们要取值参数。例如,我们定义一个名为"Person"的实体类,包含姓名、年龄和性别等参数。 接下来,我们可以创建一个Person对象的数组,用于存储多个Person实例。例如,我们创建一个名为"people"的Person数组。 然后,我们可以使用循环来遍历这个Person数组,并对每个Person对象的参数进行取值操作。例如,使用for循环可以遍历数组的每一个Person对象: ``` for(int i = 0; i < people.length; i++) { String name = people[i].getName(); // 获取姓名参数取值 int age = people[i].getAge(); // 获取年龄参数取值 String gender = people[i].getGender(); // 获取性别参数取值 // 对取得的参数进行操作,例如打印输出 System.out.println("姓名:" + name + ",年龄:" + age + ",性别:" + gender); } ``` 通过这种方式,我们可以通过循环遍历实体参数并取得其取值,然后进行进一步的操作,例如打印输出或进行计算等。这样可以方便地处理多个实体参数,并对其取值进行处理。 ### 回答2: 在Java,如果想要循环实体参数取值,可以利用循环结构(如for循环或while循环)以及实体类的成员方法或成员变量来实现。 首先,需要定义一个实体类,该类包含了需要被循环取值参数,可以通过成员变量来表示这些参数。 然后,可以使用循环结构来遍历一个包含多个实体类对象的集合(如List或数组),并通过实体类的成员方法或成员变量来获取每个实体类对象的参数值。 以for循环为例,可以按照以下步骤进行循环实体参数取值: 1. 定义一个包含多个实体类对象的集合,例如List<Entity> entities = new ArrayList<>()。 2. 使用for循环来遍历集合的每个实体类对象,例如:for (Entity entity : entities)。在循环内部,可以通过entity对象来访问实体类的成员方法或成员变量。 3. 根据实际需求,通过调用实体类的成员方法或访问成员变量来获取实体参数的值,例如:String paramValue = entity.getParam()。 4. 对获取到的实体参数值进行需要的操作,例如输出到控制台或进行其他业务逻辑处理。 5. 循环结束后,可以继续进行其他操作,或者对循环过程获取到的实体参数值进行进一步的整理和处理。 需要注意的是,以上只是一个简单的示例,实际应用可能会根据具体需求进行一些调整。此外,还可以使用其他循环结构或迭代器等方式来实现实体参数的循环取值,具体的选择可以根据实际情况和个人喜好来决定。 ### 回答3: 在Java,可以使用循环来遍历实体参数取值。 首先,需要定义一个实体类,该类包含了需要遍历的参数。假设我们有一个名为Person的实体类,该类包含了name和age两个参数。 接下来,可以使用循环来遍历实体参数取值。可以使用for循环来遍历一个Person类对象的集合,或者使用foreach循环来遍历一个数组,列表等。 例如,假设有一个Person类的列表,名为personsList,可以使用foreach循环来遍历该列表的每个Person对象,并获取其name和age参数取值。具体代码如下: ``` for (Person person : personsList) { String name = person.getName(); int age = person.getAge(); System.out.println("Name: " + name); System.out.println("Age: " + age); } ``` 在上述代码,通过person.getName()和person.getAge()来获取每个Person对象的name和age参数取值,并通过System.out.println()打印出来。 如果是遍历一个Person类对象的数组,可以使用普通的for循环来实现。具体代码如下: ``` for (int i = 0; i < personsArray.length; i++) { String name = personsArray[i].getName(); int age = personsArray[i].getAge(); System.out.println("Name: " + name); System.out.println("Age: " + age); } ``` 在上述代码,通过personsArray[i].getName()和personsArray[i].getAge()来获取数组每个Person对象的name和age参数取值,并通过System.out.println()打印出来。 总之,通过使用循环可以方便地遍历实体参数取值。无论是遍历一个集合,还是遍历一个数组,都可以利用循环来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值