Vert.x 使用Http 发布数据时的编码和解码

在Java中看,编码是String转Stream,解码是Stream转String。

router.get("/" + urlName).handler(event -> event.response().putHeader("content-type", "text/html").end(result));

浏览器中文乱码,使用URLConnection解析结果时使用默认解码是识别中文的。

    /*** 向指定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> 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;}

为了解决浏览器中文乱码,Vert.x需加入编码,而且编码方式需为GBK:

router.get("/" + urlName).handler(event -> event.response().putHeader("content-type", "text/html").end(result, "GBK"));

此时,使用URLConnection解析结果时使用默认解码会是乱码,必须采用GBK的解码方式:

in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "GBK"));

在浏览器中保证中文不乱码,可以方便测试。通过Java代码请求保证中文不乱码,保证使用。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部