我有一个页面跳到action 中的程序中出现乱码,请大家帮帮忙
页面是这样的
<%@page contentType="text/html; charset=GBK"%>
<%@ taglib prefix="ww" uri="webwork" %>
<html>
<body>

<table align="center">
<form action="add_do.action" method="post">
<p align="center">

<br>

编号:<ww:property value="id" /> 
<input name="id" type="hidden" value="<ww:property value="id"/>">

</p>
姓名:
<input type="text" name="name">
<br>
地址:
<input type="address" name="address">
<br>
<input type="submit" value="增加">
<input type="reset" value="取消">
</form>
</table>
</body>
</html>
跳到 action中接收姓名和地址就出现乱码了,转换了也不好使,大家帮帮忙,action是
public String add_do() throws Exception {

                System.out.println(name+address);
name=new String(name.getBytes("iso-8859-1"), "gb2312");
address=new String(address.getBytes("iso-8859-1"), "gb2312");
System.out.println(name+address);
打印出来的都是乱码

解决方案 »

  1.   

    接收的网页上加上
    request.setCharacterEncoding("GB2312");
    response.setContentType("text/html;charset=GB2312");
    接收参数的时候用 request.getParameter()像这个String name=new String(request.getParameter("name").getBytes("8859_1"));String address=new String(request.getParameter("address").getBytes("8859_1"));out.print(name+address);
      

  2.   

    页面使用的应该是gbk,而程序使用的是iso8859,需要转码.
    给你段程序用.public class zhuanma {
    public static String GBKtoISO8859(String str) {
    try {
    byte[] bytesStr = str.getBytes("gbk");
    return new String(bytesStr,"ISO8859_1");
    }catch(Exception e) {
    return str;
    }
    }
    }
      

  3.   

    刚才那个只有一种转码方式,再给你一个多的.
    /*
     * Created on 2004-7-14
     *
     * To change the template for this generated file go to
     * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
     */
    package net.iyun.util;/**
     * @author Administrator
     *
     * To change the template for this generated type comment go to
     * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
     */
    public class LocaleConvert {
        
    public static String ISO8859toGB2312(String str) {
    try {
    byte[] bytesStr = str.getBytes("ISO8859_1");
    return new String(bytesStr,"gb2312");
    }catch(Exception e) {
    return str;
    }
    }
    public static String ISO8859toGBK(String str) {
    try {
    byte[] bytesStr = str.getBytes("ISO8859_1");
    return new String(bytesStr,"GBK");
    }catch(Exception e) {
    return str;
    }
    }
    public static String GB2312toISO8859(String str) {
    try {
    byte[] bytesStr = str.getBytes("gb2312");
    return new String(bytesStr,"ISO8859_1");
    }catch(Exception e) {
    return str;
    }
    }
    public static String GBKtoISO8859(String str) {
    try {
    byte[] bytesStr = str.getBytes("gbk");
    return new String(bytesStr,"ISO8859_1");
    }catch(Exception e) {
    return str;
    }
    }
    }
      

  4.   

    谢谢大家了,我在网上找了些信息,问题终于解决了,拿出来一起分享下!
    我用的webwork和tomcat搭的一个程序,首先是要在webwork.properties中加webwork.tag.altSyntax=true
    webwork.i18n.encoding = GB2312这两句每个页面都统一成这样的编码<%@ page contentType="text/html; charset=gb2312"%>,我还发现一个问题,在<ww:iterator>标签中的text不用编码类型转换,直接在action中就可以得到,如果不在<ww:iterator>中的text必需得用name=new String(name.getBytes("iso-8859-1"), "gb2312");进行编码转换。
      

  5.   

    在网络上传输的只能是二进制码,即字节码文件,以数据流的方式传输,使用统一编码ISO-1-8859,所以网页在客户端和服务器之间传递时,
    要经过编码、解码和转码的过程,使用pageEncoding属性表示文件(如jsp)本身的编码,用ContentType指定由用品发送给客户端时内容的编码。
      

  6.   

    好像是这样吧
    name=new   String(name.getBytes("iso8859-1"),   "gb2312"); 
    address=new   String(address.getBytes("iso8859-1"),   "gb2312"); 你也可以自己写一个类 要继承RequestProcessor,然后重写processPreprocess方法
    protected boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) {
    try {
    request.setCharacterEncoding("GBK");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return true;
    }
    这样就可以解决转码问题了,那在struts中就不要区做转码的动作了
      

  7.   

    是在struts的Action方法中,纠正一下