Socket http请求中文乱码问题

各位高手,麻烦帮忙看看这个 http请求乱码问题,百思不得其解啊....

Socket http请求"http://www.gome.com.cn/ec/homeus/browse/provinceDroplet.jsp?callback=g"时返回乱码,网页是utf-8,编码的

代码如下:

OutputStream os = null;

BufferedReader br = null;

Socket s = null;

try {

StringBuffer req = new StringBuffer();

req.append("GET /ec/homeus/browse/provinceDroplet.jsp?callback=g HTTP/1.1\r\n");

req.append("Accept: text/javascript, application/javascript, */*\r\n");

req.append("Accept-Language: zh-cn\r\n");

req.append("User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)\r\n");

req.append("Host: www.gome.com.cn\r\n");

req.append("Connection: Close\r\n");

req.append("\r\n");

s = new Socket("www.gome.com.cn",80);

os = s.getOutputStream();

br = new BufferedReader(new InputStreamReader(s.getInputStream(),"utf-8"));

os.write(req.toString().getBytes());

os.flush();

String tmp = "";

StringBuffer sbRespon = new StringBuffer();

while((tmp = br.readLine())!=null){

sbRespon.append(tmp + "\r\n");

}

System.out.println(sbRespon.toString());

} catch (IOException e) {

try {

if (br != null) br.close();

if (os != null) os.close();

if (s != null) s.close();

} catch (IOException e2) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

------解决方案--------------------

Web服务器都是有压缩的,而且大多数服务器就算你不指定压缩算法,它也不会发送未压缩的原文,你这个服务器也不例外,它默认采用GZIP压缩算法,在它返回的Header里写得很清楚了,Content-Encoding: gzip,所以你需要用GZIPInputStream来解压缩。下面代码我试了一下没问题。

屏幕输出:

HTTP/1.1 200 OK

Server: Tengine

Date: Tue, 10 Jun 2014 06:35:56 GMT

Content-Type: text/html; charset=UTF-8

Transfer-Encoding: chunked

Connection: close

Content-Encoding: gzip

X-ATG-Version: version=QVRHUGxhdGZvcm0vMTAuMC4zcDM=

Content-Language: zh-CN

X-Powered-By: Servlet/2.5 JSP/2.1

X-Cache: HIT  from  proxy

Set-Cookie: BIGipServerpool_ATG_nginx=3591780874.20480.0000; path=/

p3p: CP="NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC"

g({"citys":[{"city":"北京","id":"11000000"},{"city":"天津","id":"12000000"},{"city":"河北省","id":"13000000"},{"city":"山西省","id":"14000000"},{"city":"内蒙古","id":"15000000"},{"city":"上海","id":"21000000"},{"city":"浙江省","id":"22000000"},{"city":"江苏省","id":"23000000"},{"city":"安徽省","id":"24000000"},{"city":"福建省","id":"25000000"},{"city":"山东省","id":"26000000"},{"city":"广东省","id":"31000000"},{"city":"广西","id":"32000000"},{"city":"海南省","id":"33000000"},{"city":"湖北省","id":"41000000"},{"city":"湖南省","id":"42000000"},{"city":"河南省","id":"43000000"},{"city":"江西省","id":"44000000"},{"city":"黑龙江省","id":"51000000"},{"city":"吉林省","id":"52000000"},{"city":"辽宁省","id":"53000000"},{"city":"宁夏","id":"61000000"},{"city":"新疆","id":"62000000"},{"city":"青海省","id":"63000000"},{"city":"陕西省","id":"64000000"},{"city":"甘肃省","id":"65000000"},{"city":"四川省","id":"71000000"},{"city":"云南省","id":"72000000"},{"city":"贵州省","id":"73000000"},{"city":"重庆市","id":"74000000"},{"city":"西藏","id":"75000000"},{"city":"台湾省","id":"81000000"},{"city":"香港","id":"82000000"},{"city":"澳门","id":"83000000"},{"city":"钓鱼岛","id":"84000000"}]})

public static void main(String[] args) throws Exception {

httpRequestTest();

}

public static String readLine(InputStream in, String charset)

throws IOException {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int b;

while ((b = in.read()) != -1 && b != 0x0D) {

baos.write(b);

}

if (b != -1) {

in.read();// should always be 0x0A

}

return new String(baos.toByteArray(), charset);

}

public static void httpRequestTest() throws IOException {

StringBuilder sb = new StringBuilder();

sb.append("GET /ec/homeus/browse/provinceDroplet.jsp?callback=g HTTP/1.1\r\n");

sb.append("Accept: */*\r\n");

sb.append("Host: www.gome.com.cn\r\n");

sb.append("Connection: Close\r\n\r\n");

Socket socket = new Socket("www.gome.com.cn", 80);

OutputStream out = socket.getOutputStream();

out.write(sb.toString().getBytes());

InputStream in = socket.getInputStream();

String line;

while ((line = readLine(in, "UTF-8")).length() != 0) {

System.out.println(line);

}

readLine(in, "UTF-8"); // should always be an empty line

GZIPInputStream gzip = new GZIPInputStream(in);

html请求socket乱码,Socket http请求中文乱码有关问题相关推荐

  1. linux下mysql乱码,Linux下mysql中文乱码解决方案

    中文存入 mysql 数据库出现的乱码,从 JSP 页面读取 mysql 中文数据出现乱码,以及在 sell 环境下查看数据库表中文数据出现乱码.为了解决中文乱码问题,首先是采用同一字符集.本人采用的 ...

  2. vscode新建html中文乱码,vscode中html中文乱码 怎么办

    vscode中html中文乱码 怎么办?VSCode 中文乱码解决办法 文件 >> 首选项 >> 设置 搜索:"files.autoGuessEncoding&quo ...

  3. php压缩中文乱码,完美解决PHP中文乱码

    一.首先是PHP网页的编码 1.php文件本身的编码与网页的编码应匹配 a.如果欲使用gb2312编码,那么php要输出头:header("Content-Type:text/html;ch ...

  4. mysql不同版本乱码_解决MySQL中文乱码以及版本不一致问题_MySQL

    一.导出数据 先说明一下自己的环境:Mac OS X 10.8.3, MySQL Community Server 5.6.10, MySQL Workbench 5.2.47. 我想把本机数据库内的 ...

  5. linux mysql插入数据乱码_linux mysql数据库中文乱码

    mysql中文乱码 mysql是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1. ...

  6. mysql数据库 中文乱码_数据库 MySQL中文乱码解决办法总结

    MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1 ...

  7. php在传json中文乱码,解决php json中文乱码问题

    解决php json中文乱码问题 php json中文乱码的解决办法:首先将类中的中文字段进行url编码:然后再将对象进行json编码:最后进行url解码即可解决乱码问题. 推荐:<PHP视频教 ...

  8. android 全局 socket,学习Android socket通信之如何解决中文乱码

    socket是网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄 ...

  9. ajax后台返回数据中文乱码_ajax提交 返回中文乱码问题

    接口返回数据相关 使用@ResponseBody后返回NUll 说明:刚把后台运行起来,兴高采烈的测试接口数据,结果无论如何都是返回null, 最终通过各种百度,发现原来是没有引入关键的Jar包. 解 ...

  10. java解析xml中文字符乱码_各种Java中文乱码的处理方法

    对于Java,由于默认的编码方式是UNICODE,所以用中文也易出问题,常见的解决是: String s2 = new String(s1.getBytes("ISO-8859-1" ...

最新文章

  1. HDFS之SequenceFile和MapFile
  2. Exchange 2003群集的安装
  3. java计算筛子概率_剑指Offer解题报告(Java版)——n个骰子的点数 43
  4. php计算多元一次方程,C++实现的求解多元一次方程示例
  5. 《那些年啊,那些事——一个程序员的奋斗史》——76
  6. 任正非:华为三十年大限快到了,想不死就得新生
  7. 云计算的发展趋势_云计算的未来发展趋势
  8. android 崩溃,android 9出现崩溃
  9. 贺利坚老师汇编课程48笔记:转移指令如jcxz
  10. Unity 阴影的制作方式
  11. 苏州十大IDC机房排名,苏州idc服务商实力排名
  12. SQL Server 2008 卸载报错
  13. 【强化学习】强化学习的基本概念与代码实现
  14. Mybatis Plugin拦截器处理特殊字符串
  15. grub linux修复 pe,恢复Ubuntu GRUB引导的方法
  16. 基于XBee进行ZigBee组网(二)——ZigBee网络与XCTU的使用
  17. 基础数学(五)——数值积分
  18. 统计之 - 独立性检验
  19. Redis中地理位置GEO模块,非常便捷的来查找附近的人或物
  20. 低频小信号放大电路(一):用于低噪声OP放大器的RIAA补偿放大器

热门文章

  1. y70.第四章 Prometheus大厂监控体系及实战 -- Prometheus监控介绍(一)
  2. c语言和python语言分别是一种什么语言_作为入门语言,C语言和Python哪一种更值得选择?...
  3. smtplib python教程_Python模块入门教程之smtplib 邮件发送
  4. 启动docker镜像
  5. 万字Android技术类校招面试题汇总,深度好文
  6. 小易爱回文(网易2021校招笔试-)
  7. 浏览器攻击框架BeEF Part 5:攻击Web应用与攻击网络
  8. C语言标识符识别的DFA,【编译原理-实验-1】词法分析器最详细设计报告(c++版)
  9. 关于搜索引擎优化(SEO)的论文学习
  10. react 接口调用