關於HttpClient4.3.*的Post和Get提交亂碼問題
無語了都,整了好久,網上各種答案,幾乎都是不行的,在apache的官網和一件網友的資料,現在OK了,分享如下:
這個原因是伺服器導致的,伺服器比如tomcat接收get方法預設使用的是ISO-8859-1編碼,而瀏覽器傳送時文字編碼是和頁面編碼保持一致的,如果頁面是使用utf-8 編碼 get方法文字自然是使用utf-8編碼,但接收伺服器沒有設定的情況下用了ISO-8859-1編碼接收,中文自然就成亂碼了,不過由於ISO-8859-1編碼是單位元組編碼所以我們可以使用getBytes("ISO-8859-1"),"utf-8"這樣把文字重新轉換成utf-8 編碼。 第一個傳送的文字是utf-8編碼 而tomcat接收後用錯誤的ISO-8859-1編碼了,這樣getBytes("ISO-8859-1")後會重新得到正確的utf-8編碼的位元組陣列 ,然後用 new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8")重新將位元組編碼成UTF-8編碼的文字這樣文字就正確了。 如果是tomcat的話 server.xml檔案裡 <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 後邊的URIEncoding就是設定get方法編碼的如果沒有指定URL接收的編碼型別,自動會用ISO-8859-1編碼
示例程式碼如下:
/* * ==================================================================== * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package test; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; /** * This example demonstrates how to abort an HTTP method before its normal completion. */ public class ClientAbortMethod { public final static void main(String[] args) throws Exception { //post(); get(); } public static void get() { CloseableHttpClient httpclient = HttpClients.createDefault(); try { String strUrl = "http://127.0.0.1:8080/Test/servlet/GetTest?info="; String strParam = URLEncoder.encode("你好", "utf-8"); strUrl += strParam; HttpGet httpget = new HttpGet(strUrl); System.out.println("Executing request " + httpget.getURI()); CloseableHttpResponse response = httpclient.execute(httpget); try { String strInfo = EntityUtils.toString(response.getEntity()); System.out.println(strInfo); httpget.abort(); } finally { response.close(); } } catch(Exception e) { e.printStackTrace(); } finally { try { httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void post() { try { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpResponse response; HttpEntity entity; HttpPost httpost = new HttpPost("http://127.0.0.1:8080/Test/servlet/GetTest"); List <NameValuePair> nvps = new ArrayList <NameValuePair>(); nvps.add(new BasicNameValuePair("info", "kaxu中文")); nvps.add(new BasicNameValuePair("password", "kaxu")); httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); response = httpclient.execute(httpost); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
服務端的程式碼如下:
package com.neusoft; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class GetTest extends HttpServlet { /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String info = new String(request.getParameter("info").getBytes("ISO-8859-1"),"utf-8"); System.out.println(info); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); request.setCharacterEncoding("utf-8"); String strInfo = request.getParameter("info"); String str1 = URLDecoder.decode(strInfo, "utf-8"); System.out.println(str1); out.flush(); out.close(); } }
相關推薦
關於HttpClient4.3.*的Post和Get提交亂碼問題
無語了都,整了好久,網上各種答案,幾乎都是不行的,在apache的官網和一件網友的資料,現在OK了,分享如下: 這個原因是伺服器導致的,伺服器比如tomcat接收get方法預設使用的是ISO-8859-1編碼,而瀏覽器傳送時文字編碼是和頁面編碼保持一致的,如果頁面是使用u
javaweb中表單post和get提交方式出現亂碼原因
最近在學javaweb遇到了亂碼問題,一直不太明白其中的具體原因,看了這篇文章明白了不少。感覺很有用所以把它轉載過來,方便以後檢視。 一、問題: 編碼問題是JAVA初學者在web開發過程中經常會遇到問題,網上也有大量相關的文章介紹,但其中很
Post 和 get 請求亂碼問題處理
原始處理get post 請求亂碼 String newEncoding = new String( params.getBytes("iso-8859-1") , "utf-8" ); 原理分析 post 處理亂碼方式 req.setCharac
HttpClient4.3 post與get請求工具類完整示例
整個工具類程式碼如下所示,可直接使用! import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache
ssm整合--解決POST跟GET提交亂碼問題
一,解決post亂碼問題在web.xml中加入:<filter> <filter-name>CharacterEncodingFilter</filter-name>
解決 post和get請求亂碼
post亂碼 在web.xml新增post亂碼filter 在web.xml中加入: <filter> <filter-name>CharacterEncodingFilter
Post提交和Get提交的區別
顯示 改變 color 多個 自身 height 數據 action 協議 表單提交中get和post的區別 1. get: 把表單內各個字段均顯示在URL中。 post:把表單內各個字段和內容放在html的header內一起傳遞給action所指的url,用戶看不
HTML提交方式post和get區別(實驗)
des url action 通過 性別 清除數據 map pass pack HTML提交方式post和get區別(實驗) 一、post和get區別 get提交,提交的信息都顯示在地址欄中。 post提交,提交的信息不顯示地址欄中,顯示在消息體中。 二、客戶端代碼
解決全站字符亂碼(POST和GET中文編碼問題)
{} tomcat ont throws turn nco cat doget pro 1 說明 亂碼問題: 獲取請求參數中的亂碼問題; POST請求:request.setCharacterEncoding(“utf-8”); GET請求:new String(r
Post,Get請求亂碼的原因和解決方案
閱讀須知: 在每個頁面的開頭處,都會有一行: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> contentType="text/html
HttpClient用Post和Get帶引數提交幫助類
轉載自https://blog.csdn.net/nevergiveuplzl/article/details/52304266 import java.util.ArrayList; import java.util.List; import java
Tomcat設定post和get最大提交量
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" <span style="color:#cc0000;">maxParamet
解決post和get請求的亂碼問題
亂碼問題 1.解決post中文亂碼問題 2.解決get請求中文引數亂碼 1.解決post中文亂碼問題 新增一個spring提供的過濾器 , 將編碼設定為utf-8 在web.xml中加入以下配置資訊
java使用Post和Get方式提交Http請求通用
很多api提供了java的post,get方式呼叫返回結果的介面,以下記錄基礎通用的傳送請求並接收返回引數的方式:package com.taray.test; import java.io.BufferedReader; import java.io.IOException
個人寫的http介面測試頁面,支援post和get引數提交
因為工作交接需要,花了一會寫的一個類似線上介面測試頁面,如果電腦能跑php,就可以直接使用,歡迎指點改進: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8
Post和Get請求之間的區別以及如何避免出現中文亂碼
解析:由於Get是沒有請求體的,所以它並不能直接設定編碼格式,但是在應用中,我們又不能出現中文亂碼,所以Bytes[] b1 =username.getBytes(“iso-8859-1”);//回退這句程式碼的作用,就是相當於回退,由於Toncat的編碼格式是ISO-8859-1,所以它會把資料從字串轉化為
如何解決POST和GET方式的中文亂碼問題
一:確保表單所在的頁面按照指定的字符集開啟★在HTML頁面中使用meta標記可以確保瀏覽器按照指定的字符集進行解碼頁面,並限定表單提交時的資料編碼方式:<meta http-equiv="content-type" content="text/html;charset=utf-8">:完成ISO-
springmvc中Post和get亂碼的解決
第一種方法依賴於tomcate6中webapps\examples\WEB-INF\classes\filters下SetCharacterEncodingFilter這個類 實現方法在web.xml 中新增以下程式碼 <filter> <filter
form表單的post,get提交方式分析以及產生的亂碼問題
Form提供了兩種資料傳輸的方式——get和post。雖然它們都是資料的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對資料產生嚴重的影響。雖然為了方便的得到變數值,Web容器已經遮蔽了二者的一些差異,但是瞭解二者的差異在以後的程式設計也會很有幫助的。 Form中的g
ajax的post提交和get提交實現前後端互動
(一)json格式(兩種) 物件格式:{"key1":obj,"key2":obj,"key3":obj...} 陣列/集合格式:[obj,obj,obj...] (二)json格式書寫練習 (1) <!DOCTYPE HTML PUBLIC "-/