【发布时间】:2017-03-20 10:28:16
【问题描述】:
我正在尝试使用 Java 上的 http 协议从服务器学习请求和检索数据,这是我在 Oracle>Tutorial>networking 上找到的代码(代码粘贴在问题的底部)
问题1:在out.write("string=" + stringToReverse);为什么“string=”没有被编码?像 stringToReverse 变量
String stringToReverse = URLEncoder.encode(args[1], "UTF-8");
问题 2: 下面有两个代码,一个来自 oracle 代码,另一个来自 android studio tuts
oracle tuts 中的代码
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
android tuts 代码
inputStream = urlConnection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
BufferedReader reader = new BufferedReader(inputStreamReader);
为什么在 oracle 代码中缺少 Charset.forName("UTF-8")?
注意:从基础解释非常有用:)
import java.io.*;
import java.net.*;
public class Reverse {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: java Reverse "
+ "http://<location of your servlet/script>"
+ " string_to_reverse");
System.exit(1);
}
String stringToReverse = URLEncoder.encode(args[1], "UTF-8");
URL url = new URL(args[0]);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream());
out.write("string=" + stringToReverse);
out.close();
BufferedReader in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
String decodedString;
while ((decodedString = in.readLine()) != null) {
System.out.println(decodedString);
}
in.close();
}
}
【问题讨论】:
-
请注意,您的问题涉及两个不同的事情:URL 编码和字符编码(使用 UTF-8 字符集)。这是完全不同的两件事。
标签: java http networking ascii encode