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個字節(jié),因為在html的header中指定了GBK編碼,所以6個字節(jié)按照GBK解碼,就是3個漢字,因此亂碼.
提交post請求時,3個漢字會以accept-charset 指定的編碼(UTF-8)來編碼,所以是9個字節(jié):
所以accept-charset 只是指定了提交時對請求要素如何編碼,但是并沒有指定請求的編碼.
通俗點:只是默默地做了事,但是沒有告訴服務器.
2,提交表單時為什么要指定請求編碼?
解決亂碼:
告訴服務器,請求要素的編碼方式,這樣服務器才知道應該如何解碼.
3,方案
使用HttpURLConnection 可以指定編碼
如何指定呢?
contentType的值為:application/x-www-form-urlencoded;charset=GBK
4,服務器如何獲取請求編碼?
String charEncoding = request.getCharacterEncoding();