编码
来源:互联网 发布:猫咪益生菌 知乎 编辑:程序博客网 时间:2024/06/05 21:14
1.编码:字符串转换为字节数组
编码:字节数组转换为字符串
各种编码表用于表示字符的字节位数不一样,导致编解码时若指定码表不一致就会出现乱码,而英文在所有的编码中所占字节数都一样,故不会产生乱码情况。下面重点讨论中文乱码的解决。
2.web服务中,tomcat默认的编码方式一般是ISO-8859-1,而此编码使用一个字节的8位进行表示,中文一般占两个字节,最多占三个字节,所以会出现中文乱码。
示例代码如下:通过sendPost方法向服务端使用utf-8编码发送请求,服务端指定utf-8编码解析发送的指定parameter,若是是不指定编码就会出现乱码。
(1)服务端代码:
public class CodeServlet extends HttpServlet {
private static final long serialVersionUID = -4358266850437306781L;
@Override
public void service(ServletRequest req, ServletResponse resp)
throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)(req);
HttpServletResponse response = (HttpServletResponse)(resp);
request.setCharacterEncoding("utf-8"); //底层以流的形式写入,客户端指定编码utf-8,解码也为utf-8
String content = request.getParameter("method");
// request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// response.setContentType("text/html;charset=utf-8");//指定浏览器以utf-8进行解码,
response.getWriter().println("你好,这是输出的中文数据");
}
}
(2)客户端代码:
public class HttpRequestUtil {
/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应,可以指定
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流,指定输出流为utf-8,否则服务端接收为乱码
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
public static void main(String[] args) {
String a = sendPost("http://localhost:8080/TestWeb/","method=nihao,这是我发的第二句中文");
System.out.println(a);
}
}
/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 遍历所有的响应头字段
for (String key : map.keySet()) {
System.out.println(key + "--->" + map.get(key));
}
// 定义 BufferedReader输入流来读取URL的响应,可以指定
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
/**
* 向指定 URL 发送POST方法的请求
*
* @param url
* 发送请求的 URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流,指定输出流为utf-8,否则服务端接收为乱码
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "utf-8"));
// 发送请求参数
out.print(param);
// flush输出流的缓冲
out.flush();
// 定义BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
System.out.println("发送 POST 请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输出流、输入流
finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return result;
}
public static void main(String[] args) {
String a = sendPost("http://localhost:8080/TestWeb/","method=nihao,这是我发的第二句中文");
System.out.println(a);
}
}
0 0
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- 编码
- Android系统中Parcelable和Serializable的区别
- 第十二周-OJ-E输出交换后的两个值
- 润乾在hibernate中配置报表数据源
- Angular 动态生成html中 ng-click无效
- 解决weblogic页面和控制台乱码问题
- 编码
- centos 嘀嘀 嘀
- 静态库和导入库的区别
- sicily-1443. Printer Queue
- 五、对象的访问
- 工作流学习——Activiti流程定义管理三步曲
- mac安装CocoaPods遇到的问题及解决办法【转】
- 从0开始学习 GitHub 系列之「05.Git 进阶」
- 使用EClipse和Genymotion时,adb启动失败