中文乱码原理代码:

 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中文乱码透析、总结相关推荐

  1. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...

  2. java 空格乱码_java 中文乱码以及空格乱码解决方案总结

    当使用response.write返回JSON数据到前端时,需要在前面加上这句 response.ContentType = "text/html;charset=gb2312"; ...

  3. jsp mysql中文乱码,jsp中文乱码 jsp mysql 乱码的解决方法

    jsp中文乱码 jsp mysql 乱码的解决方法 jsp中文乱码 jsp mysql 乱码要servlet里面支持中文的方法: 在dopost或者doget的第一句加上: request.setCh ...

  4. 【IntelliJ IDEA】中文乱码问题 ( 代码乱码 | 编译乱码 | 控制台乱码 )

    文章目录 I . 乱码类型说明 II . 解决代码乱码问题 III . 编译时乱码解决 IV . 控制台乱码解决 I . 乱码类型说明 使用 IntelliJ IDEA 开发 Java 程序时 , 会 ...

  5. idea源码注释乱码_idea中文注释出现乱码,我靠自己解决了

    如果你像我一样⬇️,查遍google百度,半天下来还是找不到解决方案,说不定这篇博客能帮助你顺利解决呢 好了,那么开始说说我是怎么解决麻烦的. 首先,我想打开一份java文稿.光预览,它是没有任何问题 ...

  6. php发送邮件,标题是乱码,php的mail函数发送UTF-8编码中文邮件时标题乱码怎么办?...

    php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法:1.将subject里头的文字符合RFC 2047的规范:2.在headers中添加[content-type]:3.对用来发送邮件 ...

  7. 在VS2017中用c#编写程序执行python遇到中文不能处理出现乱码的情况

    最近在做在.NET平台调用python文件. 使用的工具为IronPython,VS2017 使用的语言为C#,python(2.7) 怎么使用请看这里 这篇文章主要是说下遇到的处理中文字符时出现乱码 ...

  8. 01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置

              Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNETNetSarang Xshell 4 Build 0 ...

  9. SQL Server插入中文数据后出现乱码

    原文:SQL Server插入中文数据后出现乱码 今天在做项目的过程中遇到如标题的问题,情况如下图: 数据库使用的是SQL Server2012版本,创建表的脚本如下: CREATE TABLE [d ...

最新文章

  1. 智课雅思词汇---十、pend是什么意思
  2. 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解(二)
  3. springside / springside4—CRUD页面教程
  4. mysql 导入导出脚本_MySQL导入和导出sql脚本
  5. C语言线性表之单链表
  6. mysql 函数无法访问_mysql 中出现:不能打开到主机的连接,在端口3306: 连接失败...
  7. 初学XPath,其实很简单
  8. 编程基本功:变量局部化的教训
  9. 详细介绍ASP.NET状态保存方法
  10. yum 安装、 rpm安装、 源码编译安装
  11. msys2+mingw32环境搭建
  12. 铃木敏文《零售的哲学》品读之对产品经理和程序员的现实意义 下篇
  13. 如何查看自己的外网 IP 地址
  14. 不懂面试官想要哪种数据分析师,简历写的再好也没用!文末有福利
  15. SPEA多目标优化算法--测试case发电机发电量分配[转]
  16. Word最常用的100个通用快捷键
  17. asp毕业设计——基于asp+access的车辆调度管理系统设计与实现(毕业论文+程序源码)——车辆调度管理系统
  18. 网页 php,怎么用php写一个网页
  19. python怎么返回上一步操作_一步一步教你如何用python操作mysql
  20. Executor框架的使用

热门文章

  1. SpringBoot常用注解说明
  2. 定时任务getScheduler
  3. SouceInsight 快捷方式查看与修改
  4. [Web开发] IE8 网页开发参考文档
  5. 利用sql语句实现到datagridview显示的转换
  6. 排除IIS特殊管理困惑
  7. Java BIO 聊天程序
  8. mysql 5.720安装_MySQL 5.7.27下载安装配置的详细教程
  9. asa清空配置_Cisco ASA 管理配置文件
  10. 一个页面多个ajax统一loading,页面有多个向后台发送的请求加载过程中显示loading,加载完成loading消失...