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);
用HttpURLConnection得到一个xml,这个xml的编码是utf-8,但是打印出来一句话里有的正常有的是??,很奇怪
<?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>
<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>
System.out.println(result);
这个你在控制台打印的有乱码吗?
PS:刚开始用Eclipse,以前都用MyEclipse的
// 获取google上的天气情况,写入文件
try {
URL url = new URL(URL + cityName);
InputStream inputstream = url.openStream();
String s, str;
BufferedReader in = new BufferedReader(new InputStreamReader(
inputstream));
StringBuffer stringbuffer = new StringBuffer();
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileAddr), "utf-8"));
while ((s = in.readLine()) != null) {
stringbuffer.append(s);
}
str = new String(stringbuffer);
out.write(str);
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}用我的这个流试下
try {
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(),"GBK");
System.out.println(result); } catch (Exception e) {
e.printStackTrace();
}
}}
<?xml version="1.0" ?>
<weatherinfo>
<cityname>大连</cityname>
<citycode>101070201</citycode>
<citydesc>辽宁 大连</citydesc>
<spell>Dalian</spell>
<areacode>0411</areacode>
<zipcode>116000</zipcode>
<longitude>E121.576</longitude>
<latitude>N38.944</latitude>
<publishtime>2010-07-02 11:00</publishtime>
<data>
<date>2010-07-02</date>
<icon>d03|n01</icon>
<weather>阵雨转多??/weather>
<temperature>25??20??/temperature>
<winddirect>东北??-5??/winddirect>
</data>
<data>
<date>2010-07-03</date>
<icon>d00|n00</icon>
<weather>??/weather>
<temperature>27??21??/temperature>
<winddirect>东北??-5级转南风4-5??/winddirect>
</data>
<data>
<date>2010-07-04</date>
<icon>d00|n01</icon>
<weather>晴转多云</weather>
<temperature>28??22??/temperature>
<winddirect>西南??-5??/winddirect>
</data>
<data>
<date>2010-07-05</date>
<icon>d02|n02</icon>
<weather>??/weather>
<temperature>28??20??/temperature>
<winddirect>西南??-5??/winddirect>
</data>
<data>
<date>2010-07-06</date>
<icon>d01|n01</icon>
<weather>多云</weather>
<temperature>26??21??/temperature>
<winddirect>北风4-5级转东南??-5??/winddirect>
</data>
<data>
<date>2010-07-07</date>
<icon>d01|n01</icon>
<weather>多云</weather>
<temperature>26??21??/temperature>
<winddirect>东南??-5??/winddirect>
</data>
<data>
<date>2010-07-08</date>
<icon>d00|d00</icon>
<weather>??/weather>
<temperature>27??27??/temperature>
<winddirect>东南??-5??/winddirect>
</data>
<live>
<updatetime>16:20</updatetime>
<temperature>25.7??/temperature>
<humidity>90%</humidity>
<winddirect>西北风小????/winddirect>
</live>
</weatherinfo>
//问题可以简化为这样,有人能解决吗
String testEncodeStr = new String("东南风4-5级".getBytes("utf-8"));
//涓滃崡椋?-5绾?
//从网络得到的字符是utf-8编码
//我知道以下这么写好用,但是从网络得到readline得到的就是:涓滃崡椋?-5绾?
//String testEncodeStr = new String("东南风4-5级".getBytes("utf-8"),"utf-8");
String testDecodeStr = new String(testEncodeStr.getBytes("GBK"),"UTF-8");//GBK可以不写,默认就是
System.out.println(testEncodeStr);
System.out.println(testDecodeStr);
//再解码码时
//东南??-5??
//等待高人解决
你手机的系统编码是什么?如果是UTF-8,那应该没有问题!要是能把这个转回来,那问题就解决了! String testEncodeStr = new String("东南风4-5级".getBytes("utf-8"));
手机里可以这么用的new String(result,"utf-8");然后就是对的
这样不就转回来了?
关于“这样不就转回来了?”你仔细看看我的注释,还有,字符串中没有数字 String testDecodeStr = new String(testEncodeStr.getBytes("GBK"),"UTF-8");//这么就转回来了
Window->Preferences->General->Workspace->Text file encoding
将其改为UFT-8即可。
这样收到的内容默认就认为是utf-8了
你这么做,程序导出jar包后,运行不出乱码吗?
你如果有awt,那就直接导出jar看看有没有乱码?
如果没有awt,那你在doc下运行下程序,看看出不出乱码?
由于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
还要做如下两步1。chcp 65001//utf-8 回复命令为 chcp 936//即GBK2。字体修改为:Lucida Console。