我们做网页的时候 如果源代码中的是 中文
浏览器回给解释成中文  “中文” 两个字符,请问这样的对应关系或者说原理是什么。 而且如果你的 页面设置了 
<%@ page contentType="text/html; charset=iso_8859-1"%>那么你在页面 form 里面提交的 中文字符会被编码成为 &# 加 五个数字加分号 的形式,我接受到 这样的提交结果后怎样处理才能式正确的中文。 向大家请教了

解决方案 »

  1.   

    编码转换以下就可以了
    String s=new String(Request.getParameter("???").getBytes("iso-8859-1"));
      

  2.   

    Request.getParameter("???").getBytes("iso-8859-1")
    解决就可以了。
      

  3.   

    编码问题 
    要么String s=new String(s.getBytes("iso-8859-1"),"GBK");
    或者写个FILTER来解决编码问题 后者比较好
      

  4.   

    给你两个转换的工具类
    页面与页面之间的
    public class ParamUtil {
    /**
     * 获得request中指定名称的参数值,若有中文乱码问题请增加转码部分
     * 
     * @param request
     *            ServletRequest对象
     * @param paramName
     *            参数名称
     * @return 如果该变量值存在则返回该值,否则返回""
     */
    public static String getParameter(ServletRequest request, String paramName) {
    String temp = request.getParameter(paramName);
    if (temp != null && !temp.equals("")) {
    // 若有中文问题,请将下面语句注释
    try {
    temp = new String(temp.getBytes("8859_1"), "GB2312");
    } catch (Exception e) {
    return "";
    }
    return temp;
    } else {
    return "";
    }
    } /**
     * 获得request中的int型参数值
     * 
     * @param request
     *            ServletRequest对象
     * @param paramName
     *            参数名称
     * @param defaultNum
     *            默认值,如果没有返回该值
     * @return 如果该参数值存在则返回其转换为int型的值,否则返回defaultNum
     */
    public static int getIntParameter(ServletRequest request, String paramName,
    int defaultNum) {
    String temp = request.getParameter(paramName);
    if (temp != null && !temp.equals("")) {
    int num = defaultNum;
    try {
    num = Integer.parseInt(temp);
    } catch (Exception ignored) {
    }
    return num;
    } else {
    return defaultNum;
    }
    }
    }页面到数据库的 我用的是过滤器
    public class EncodingFilter extends HttpServlet implements Filter { private static final long serialVersionUID = 1L; /* 过滤器引用 */
    private FilterConfig filterConfig = null; /* 字符集变量 */
    private String charSet = null; /* 过滤器转换字符集 */
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    try {
    /* 获得应用程序配置的字符集 */
    charSet = (String) filterConfig.getInitParameter("charSet"); /* 设置Http字符集的请求为系统的默认字符集 */
    HttpServletRequest req = (HttpServletRequest) request;
    req.setCharacterEncoding(charSet); /* 获得Http的响应 */
    HttpServletResponse res = (HttpServletResponse) response; /* 转发道请求的资源 */
    chain.doFilter(req, res);
    } catch (Exception e) {
    System.out.println("EncodingFilter " + e.getMessage());
    // PrintWriter out = response.getWriter();
    // out.println("Please Login");
    }
    } /* 过滤器销毁 */
    public void destroy() {
    this.filterConfig = null;
    this.charSet = null;
    } /* 过滤器初始化 */
    public void init(FilterConfig filterConfig) {
    this.filterConfig = filterConfig;
    }
    }在web.xml中加上
    <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.menu.servlet.EncodingFilter(EncodingFilter类在工程中的位置)</filter-class>
    <init-param>
    <param-name>charSet</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter> <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
      

  5.   

    个为老大你们说的都不对啊 。不是通常的编码问题的。new String("&#20013;&#25991;".getBytes("iso-8859-1"),"GBK");肯定还是原值的。
    我这里没有出现乱码,知识  汉字用另外一种方式表示了而已。
      

  6.   

    我想了好久的结果是这样的:如下&#***;
    是html的特殊字元
    真正有用的是***“中字的unicode 是 ff fe 2d 4e”
    而他对应的 表示是:20013 转换成16进制 是 4e 2d
    跟 uinicode 的后两位 正好反过来,是不是规律在这里。知道的同志们指导下给。大家给点意见或者资料。
      

  7.   

    同意jyplp的意见,
    那个就是UNICODE的内码,我记得好像有个工具可以做这个转换,JDK里面带着,忘记名字了。
    使用Eclipse编写中文网页的话,保存之后就会是那个样子的。
      

  8.   

    > 我想了好久的结果是这样的:如下楼主理解的是对的。&#nnnnn; 这种表示法是 HTML 中用于表述特殊字符的方式(其实是来自 XML 的表述方式),这里的 nnnnn 是用十进制表示的 UNICODE 码。<%@ page contentType="text/html; charset=iso_8859-1"%> 这种东西是程序员用来告诉编译器这个 JSP 文件本身是用什么字符集编写的(注意是 JSP 文件本身,而不是指它将来能显示什么)。而这样做的一个连带效应就是 WEB Server(比如 Tomcat)会告诉浏览器(比如 IE)传过来的文件(就是那个 HTML 内容)的编码方式(同样,这里指的是 HTML 字符流本身的编码方式,而不是指这个 HTML 显示出来的样子)。当 IE 知道了这个 HTML 页面的传输编码方式是 iso-8859-1 的,它就会认为 WEB Server 是以这种方式来解析它提交上去的 FORM,所以 IE 就会以 iso-8859-1 的编码方式来处理将要提交的值。而 iso-8859-1 的编码方式支持的字符集只是 ASCII 字符集,无法表达中文字符,所以就启用了 &#nnnnn; 这种“转义”方法。如果你在服务器端收到了 "&#nnnnn;" 这样的字符串,要想把它转成真正的中文字符,那就只能自己解析字符串喽。其实,除非你想在同一个页面里“同时支持”多种语言的字符,否则不要用 iso-8859-1 作为页面的编码方式,用 GBK 好了。
      

  9.   

    String s=new String(Request.getParameter("???").getBytes("iso-8859-1"));