81,092
社区成员
发帖
与我相关
我的任务
分享
URL url = new URL("http://weather.xcyh.org/xml");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = "",result = "";
while( (line =br.readLine()) != null ){
result +="\n"+line;
}
result = new String(result.getBytes(),"UTF-8");
System.out.println(result);
<?xml version="1.0" ?>
<weatherinfo>
<cityname>无锡</cityname>
<citycode>101190201</citycode>
<citydesc>江苏 无锡</citydesc>
<spell>Wuxi</spell>
<areacode>0510</areacode>
<zipcode>214000</zipcode>
<longitude>E120.288</longitude>
<latitude>N31.574</latitude>
<publishtime>2010-07-02 11:00</publishtime>
<data>
<date>2010-07-02</date>
<icon>d04|n04</icon>
<weather>雷阵??/weather>
<temperature>36??28??/temperature>
<winddirect>西南??-4??/winddirect>
</data>
<data>
<date>2010-07-03</date>
<icon>d04|n04</icon>
<weather>雷阵??/weather>
<temperature>32??26??/temperature>
<winddirect>西风3-4级转西北??-4??/winddirect>
</data>
<data>
<date>2010-07-04</date>
<icon>d04|n04</icon>
<weather>雷阵??/weather>
<temperature>32??26??/temperature>
<winddirect>西北??-4??/winddirect>
</data>
<data>
<date>2010-07-05</date>
<icon>d01|n07</icon>
<weather>多云转小??/weather>
<temperature>32??25??/temperature>
<winddirect>东风3-4??/winddirect>
</data>
<data>
<date>2010-07-06</date>
<icon>d01|n01</icon>
<weather>多云</weather>
<temperature>32??24??/temperature>
<winddirect>东风3-4??/winddirect>
</data>
<data>
<date>2010-07-07</date>
<icon>d01|n01</icon>
<weather>多云</weather>
<temperature>32??24??/temperature>
<winddirect>东风3-4??/winddirect>
</data>
<data>
<date>2010-07-08</date>
<icon>d01|d01</icon>
<weather>多云</weather>
<temperature>29??29??/temperature>
<winddirect>东风3-4??/winddirect>
</data>
<live>
<updatetime>16:00</updatetime>
<temperature>35.2??/temperature>
<humidity>50%</humidity>
<winddirect>西风小于3??/winddirect>
</live>
</weatherinfo>
由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。然后,javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。当我们不加设置就编译时,相当于使用了参数:javac -encoding gbk XX.java,当然就会出现不兼容的情况。
解决办法是:应该使用-encoding参数指明编码方式:javac -encoding UTF-8 XX.java
String testEncodeStr = new String("东南风4-5级".getBytes("utf-8"));