zoukankan      html  css  js  c++  java
  • 提交表单加编码

    1,提交表单时可以指定编码吗?

    准确地说:提交表单时可以指定请求要素的编码吗?

    如果是使用html的form表单是不行的.

    下面是我做的实验,html如下:

     

    不仅head中指定了编码为gbk,而且form属性accept-charset 也指定为gbk,但是提交表单时,后台获取到的request charset却是"UTF-8",

     

    chrome和火狐浏览器中都是一样.

    结论:

    (a)html的form表单标签中无法指定request的编码.

    (b)提交的请求编码是UTF-8

    那么表单标签中的属性accept-charset有什么作用呢?

    告诉浏览器提交表单时以什么编码方式对请求要素进行编码

     

    如上图,指定了accept-charset 的编码为:UTF-8,页面的编码是utf-8,而head中指定GBK编码,所以

    address 的值乱码了,本来应该是"中国",结果显示:

     中国,两个汉字,以UTF-8编码则有6个字节,因为在html的header中指定了GBK编码,所以6个字节按照GBK解码,就是3个汉字,因此乱码.

    提交post请求时,3个汉字会以accept-charset 指定的编码(UTF-8)来编码,所以是9个字节:

     

    所以accept-charset 只是指定了提交时对请求要素如何编码,但是并没有指定请求的编码.

    通俗点:只是默默地做了事,但是没有告诉服务器.

    2,提交表单时为什么要指定请求编码?

    解决乱码:

    告诉服务器,请求要素的编码方式,这样服务器才知道应该如何解码.

    3,方案

    使用HttpURLConnection 可以指定编码

    如何指定呢?

    Java代码  收藏代码
    1. huc.addRequestProperty("content-type", contentType);  

     contentType的值为:application/x-www-form-urlencoded;charset=GBK

     

    4,服务器如何获取请求编码?

    String charEncoding = request.getCharacterEncoding();

    Java代码  收藏代码
    1. /*** 
    2.      * Get request query string, form method : post 
    3.      *  
    4.      * @param request 
    5.      * @return 
    6.      * @throws IOException 
    7.      */  
    8.     public static String getRequestPostStr(HttpServletRequest request)  
    9.             throws IOException {  
    10.         byte buffer[] = getRequestPostBytes(request);  
    11.         if(ValueWidget.isNullOrEmpty(buffer)){  
    12.             return null;  
    13.         }  
    14.         String charEncoding = request.getCharacterEncoding();  
    15.         if (charEncoding == null) {  
    16.             charEncoding = "UTF-8";  
    17.         }  
    18.         return new String(buffer, charEncoding);  
    19.     } 
  • 相关阅读:
    WPF编译时提示"xxx不包含适合于入口点的静态 Main方法xxx"
    被解放的姜戈04 各取所需
    SublimeText3 snippet 编写总结
    安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试
    被解放的姜戈03 所谓伊人
    被解放的姜戈02 庄园疑云
    被解放的姜戈01 初试天涯
    EXP-00000: Message 0 not found; No message file for product=RDBMS, facility=EXP问题的解决方案
    Python网络02 Python服务器进化
    Python网络01 原始Python服务器
  • 原文地址:https://www.cnblogs.com/wepe/p/7424571.html
Copyright © 2011-2022 走看看