提交表单时指定编码

简介:

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.     }  

 

相关文章
|
5月前
|
JavaScript 前端开发 数据安全/隐私保护
提交表单与验证表单案例
提交表单与验证表单案例
47 0
|
12月前
|
存储
表单的解析
表单的解析
|
5月前
提交form表单判断是文件还是文本
提交form表单判断是文件还是文本
25 0
|
5月前
在表单提交后设置文字信息,及时播报表单的提交情况
表单作为草料二维码的高级功能之一,可用于收集格式统一的数据。你可以通过组合姓名、图片、检查项等组件搭建出电子表单,关联到二维码中,扫码填写表单即可更快速、规范的收集数据。在表单设置-提交成功页设置中可以设置表单提交成功后的页面详情和后续操作,支持设置填表人提交后显示文字信息、获取二维码凭证、配置后续操作按钮、跳转到活码。下面是表单提交后显示文字信息的使用技巧。
|
5月前
|
JavaScript 前端开发
Javascript的form表单校验输入框
Javascript的form表单校验输入框
42 0
|
JSON 前端开发 JavaScript
表单提交类型
关于提交表单的属性
100 0
|
JSON 前端开发 数据格式
如何优雅的获取Form表单数据?
如何优雅的获取Form表单数据?
如何优雅的获取Form表单数据?
HTML设置表单的enctype编码方式
本文目录 1. 用途 2. `application/x-www-form-urlencoded` 解释 3. `multipart/form-data` 解释 4. `text/plain`解释
161 0
|
编解码 应用服务中间件
表单提交方式由POST改为GET出现乱码的解决
组合查询功能,原先使用<html:form>缺省是以POST方式提交的,增加了分页功能后,由于要在URL里记住用户提交的查询内容(例如:http://localhost:8080/aims/client/filter.do?name=%E5%BC%A0&address=%E5%8C%97%E4%BA%AC&title=&duty=&departmentCode=10000001&categoryCode=10000002&fieldCode=10000006&genderCode=&identityCode=),所以表单的提交方式要改为GET。
1129 0