HttpClient_002_中文乱码、HttpClient中文乱码透析、总结
中文乱码原理代码:
String s = "中文";byte[] bs2 = s.getBytes("utf-8");//将s拆成:utf-8个体,注:utf-8指s原本就是utf-8String s1 = new String(bs2,"iso-8859-1");//将bs2组装成:iso-8859-1串String s2 = new String(bs2,"utf-8");//将bs2组装成:utf-8串String s3 = new String(s1.getBytes("iso-8859-1"),"utf-8");//将s1拆成iso-8859-1串,然后组装成utf-8System.out.println(s1+"\n"+s2+"\n"+s3);
结果:
?????? 中文 中文
实例源码下载:http://download.csdn.net/detail/poiuy1991719/8594485
解决HttpClient中文乱码,项目演示:
1:编写httpClient_001
所需包:
1、1:编写URLUtil类
package com.west.test.httpclient;public class URLUtil {public static final String HttpClient_002="http://localhost:8080/httpClient_002/";//访问本地项目2路径public static final String POST_CONTENT=HttpClient_002+"PostContent"; }
1、2:编写Servlet类
package com.west.test.httpclient;import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.PostMethod; import javax.servlet.ServletException;public class PostServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println("========httpClient_001 PostServlet start=========");System.out.println("httpClient_001:doPost方式提交");HttpClient httpClient = new HttpClient();PostMethod method = new PostMethod(URLUtil.POST_CONTENT); // 解决中文乱码(设置:"我方"HttpClient提交、解析所用码)method.getParams().setContentCharset("utf-8");String charset=method.getParams().getContentCharset();NameValuePair name = new NameValuePair("name", "张三");NameValuePair password = new NameValuePair("password","password:123321");method.setRequestBody(new NameValuePair[] { name, password });String rt = "";try {int status = httpClient.executeMethod(method);if (status == HttpStatus.SC_OK) {rt = method.getResponseBodyAsString();System.out.println("httpClient_001得到:" + rt);codeTest(rt,charset);}} catch (Exception e) {e.printStackTrace();System.out.println("网络连接失败,请联系管理员!");}// 释放HttpClient资源 method.releaseConnection();outMessage(response, rt);}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println("httpClient_001:doGet方式提交");doPost(request, response);}public void outMessage(HttpServletResponse response, String message) {try { // 解决"界面"中文乱码(设置:"我方"提交所用码、"对方"解析所用码)response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print(message);out.close();} catch (IOException e) {e.printStackTrace();}}public void codeTest(String rt ,String charset) throws Exception {System.out.println("得到的是:"+charset);byte[] btr=rt.getBytes(charset);String rt01 = new String(btr, "iso-8859-1");System.out.println("String(btr,'iso-8859-1')转码01:" + rt01);String rt02 = new String(btr, "utf-8");System.out.println("String(btr,'utf-8')转码02:" + rt02);String rt03 = new String(rt01.getBytes("iso-8859-1"), "utf-8");System.out.println(rt03);} }
1.3:配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.5"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>test</display-name><servlet><servlet-name>PostServlet</servlet-name><servlet-class>com.west.test.httpclient.PostServlet</servlet-class></servlet><servlet-mapping><servlet-name>PostServlet</servlet-name><url-pattern>/PostServlet</url-pattern></servlet-mapping><session-config><session-timeout>600</session-timeout></session-config><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list> </web-app>
1、3:编写界面:index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>test</title> </head> <body><form action="PostServlet" method="post"><input type="submit" value="Post提交"></form> </body> </html>
2:编写项目:httpClient_002
2、1:编写Servlet类
package com.test.servlet;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class PostContent extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {System.out.println("=========httpClient_002 PostContent start============");System.out.println("httpClient_002:doPost方式执行"); // 解决中文乱码(设置:"我方"解析所用码)request.setCharacterEncoding("utf-8");String name = request.getParameter("name");String password = request.getParameter("password");System.out.println("httpClient_002得到:{name:" + name+",password:"+password+"}");String reStr = "{name=" + name + ",password="+ password+"}";outMessage(response, reStr);}public void outMessage(HttpServletResponse response, Object message) {try { // 解决中文乱码(设置:"我方"提交所用码,"httpClient_001"解析所用码)response.setContentType("text/html;charset=utf-8");PrintWriter out = response.getWriter();out.print(message);out.close();} catch (IOException e) {e.printStackTrace();}} }
2.2:配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.5"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><display-name>test002</display-name><servlet><servlet-name>PostContent</servlet-name><servlet-class>com.test.servlet.PostContent</servlet-class></servlet><servlet-mapping><servlet-name>PostContent</servlet-name><url-pattern>/PostContent</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file></welcome-file-list> </web-app>
3:总结
1、解决中文乱码(设置:"我方"HttpClient提交、解析所用码)method.getParams().setContentCharset("utf-8");2、解决"界面"中文乱码(设置:"我方"提交所用码、"对方"解析所用码)response.setContentType("text/html;charset=utf-8");3、解决中文乱码(设置:"我方"解析所用码)request.setCharacterEncoding("utf-8");4、解决中文乱码(设置:"我方"提交所用码、"httpClient_001"解析所用码),同2response.setContentType("text/html;charset=utf-8");
附加:
请求网页、servlet:
GetMethod getMethod = new GetMethod("http://www.baidu.com"); //(1)、这里可以设置自己想要的编码格式 getMethod.getParams().setContentCharset("utf-8"); //(2)、对于get方法也可以这样设置 getMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GB2312"); //(3)、还可以如下这样设置 getMethod.addRequestHeader("Content-Type", "text/html; charset=UTF-8"); //(4)、当然同样可以直接设置 httpClient 对象的编码格式 HttpClient httpClient = new HttpClient(); httpClient.getParams().setContentCharset("utf-8");//使用流的方式读取也可以如下设置 InputStream in = getMethod.getResponseBodyAsStream(); //这里的编码规则要与上面的相对应 BufferedReader br = new BufferedReader(new InputStreamReader(in,"utf-8"));
请求方法、servlet:
PostMethod PostMethod= new PostMethod("http://localhost:8080/ezid-cert-mobile/upload"); //(1)、通常可以如下设置自己想要的编码格式 postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"utf-8");//(2)、也重载PostMethod的getRequestCharSet()方法 public class UTF8PostMethod extends PostMethod{public UTF8PostMethod(String url){super(url);}@Overridepublic String getRequestCharSet() {return "UTF-8";} }//(3)、如果是方法的参数出现乱码问题,那么你可以如下设置参数 Charset utf8Charset = Charset.forName("UTF-8"); multipartContent.addPart("name", new StringBody(Info.getUserEntity().getName(), utf8Charset));//(4)、如果你用的是Part [] parts={...}传参方式的话可以如下设置 StringPart name=new StringPart("name",certFormEntity.getPersonName(), "UTF-8");
转载于:https://www.cnblogs.com/zjsy/p/4441255.html
HttpClient_002_中文乱码、HttpClient中文乱码透析、总结相关推荐
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法
Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...
- java 空格乱码_java 中文乱码以及空格乱码解决方案总结
当使用response.write返回JSON数据到前端时,需要在前面加上这句 response.ContentType = "text/html;charset=gb2312"; ...
- jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法
jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...
- 【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )
文章目录 I . 乱码类型说明 II . 解决代码乱码问题 III . 编译时乱码解决 IV . 控制台乱码解决 I . 乱码类型说明 使用 IntelliJ IDEA 开发 Java 程序时 , 会 ...
- idea源码注释乱码_idea中文注释出现乱码,我靠自己解决了
如果你像我一样⬇️,查遍google百度,半天下来还是找不到解决方案,说不定这篇博客能帮助你顺利解决呢 好了,那么开始说说我是怎么解决麻烦的. 首先,我想打开一份java文稿.光预览,它是没有任何问题 ...
- php发送邮件,标题是乱码,php的mail函数发送UTF-8编码中文邮件时标题乱码怎么办?...
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法:1.将subject里头的文字符合RFC 2047的规范:2.在headers中添加[content-type]:3.对用来发送邮件 ...
- 在VS2017中用c#编写程序执行python遇到中文不能处理出现乱码的情况
最近在做在.NET平台调用python文件. 使用的工具为IronPython,VS2017 使用的语言为C#,python(2.7) 怎么使用请看这里 这篇文章主要是说下遇到的处理中文字符时出现乱码 ...
- 01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置
Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNETNetSarang Xshell 4 Build 0 ...
- SQL Server插入中文数据后出现乱码
原文:SQL Server插入中文数据后出现乱码 今天在做项目的过程中遇到如标题的问题,情况如下图: 数据库使用的是SQL Server2012版本,创建表的脚本如下: CREATE TABLE [d ...
最新文章
- 智课雅思词汇---十、pend是什么意思
- 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解(二)
- springside / springside4—CRUD页面教程
- mysql 导入导出脚本_MySQL导入和导出sql脚本
- C语言线性表之单链表
- mysql 函数无法访问_mysql 中出现:不能打开到主机的连接,在端口3306: 连接失败...
- 初学XPath,其实很简单
- 编程基本功:变量局部化的教训
- 详细介绍ASP.NET状态保存方法
- yum 安装、 rpm安装、 源码编译安装
- msys2+mingw32环境搭建
- 铃木敏文《零售的哲学》品读之对产品经理和程序员的现实意义 下篇
- 如何查看自己的外网 IP 地址
- 不懂面试官想要哪种数据分析师,简历写的再好也没用!文末有福利
- SPEA多目标优化算法--测试case发电机发电量分配[转]
- Word最常用的100个通用快捷键
- asp毕业设计——基于asp+access的车辆调度管理系统设计与实现(毕业论文+程序源码)——车辆调度管理系统
- 网页 php,怎么用php写一个网页
- python怎么返回上一步操作_一步一步教你如何用python操作mysql
- Executor框架的使用
热门文章
- SpringBoot常用注解说明
- 定时任务getScheduler
- SouceInsight 快捷方式查看与修改
- [Web开发] IE8 网页开发参考文档
- 利用sql语句实现到datagridview显示的转换
- 排除IIS特殊管理困惑
- Java BIO 聊天程序
- mysql 5.720安装_MySQL 5.7.27下载安装配置的详细教程
- asa清空配置_Cisco ASA 管理配置文件
- 一个页面多个ajax统一loading,页面有多个向后台发送的请求加载过程中显示loading,加载完成loading消失...