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>

解决方案 »

  1.   

    <?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>
      

  2.   

    我的是用utf-8的  抓的是Google的天气 你抓的是哪个的?
      

  3.   

     result = new String(result.getBytes(),"UTF-8");
                 System.out.println(result);
    这个你在控制台打印的有乱码吗?
      

  4.   

    是的,是Eclipse的,以前用netbeans的时候中文打出来都是??的,Eclipse也有这个问题?
    PS:刚开始用Eclipse,以前都用MyEclipse的
      

  5.   

    <?xml version="1.0" encoding="UTF-8"?>
      

  6.   

    public String getWeather(String URL,String cityName, String fileAddr) {
    // 获取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();
    }
    }用我的这个流试下
      

  7.   

    你把result的内容给我我用eclipse试试!
      

  8.   

    public class Test { public static void main(String[] args) {
    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();

    }  
    }}
      

  9.   

    getBytes(“获取时的编码”)时,指定一下获取时的编码
      

  10.   


    <?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>
      

  11.   


       //问题可以简化为这样,有人能解决吗
            
             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??
            
             //等待高人解决
      

  12.   

    这个网站的数据我在J2ME中取过,手机上都是没有问题的,很奇怪
      

  13.   


    你手机的系统编码是什么?如果是UTF-8,那应该没有问题!要是能把这个转回来,那问题就解决了!       String testEncodeStr = new String("东南风4-5级".getBytes("utf-8"));
      

  14.   

    我手机就是转了一下码,转成utf-8就行了啊!不过手机是用HttpConnection取的数据
    手机里可以这么用的new String(result,"utf-8");然后就是对的
      

  15.   

    System.out.println(new String("东南风4-5级".getBytes("utf-8"),"utf-8"));
    这样不就转回来了?
      

  16.   


    关于“这样不就转回来了?”你仔细看看我的注释,还有,字符串中没有数字 String testDecodeStr = new String(testEncodeStr.getBytes("GBK"),"UTF-8");//这么就转回来了
      

  17.   

    我觉得这个程序取得从网络传过来的编码是以下这样的String testEncodeStr = new String("东南风4-5级".getBytes("utf-8"));
      

  18.   

    搞定了,更改Eclipse默认编码!
    Window->Preferences->General->Workspace->Text file encoding
    将其改为UFT-8即可。
    这样收到的内容默认就认为是utf-8了
      

  19.   


    你这么做,程序导出jar包后,运行不出乱码吗?
      

  20.   

    在本地的确还是乱码,看来跟JDK的默认编码有关啊!
      

  21.   


    你如果有awt,那就直接导出jar看看有没有乱码?
    如果没有awt,那你在doc下运行下程序,看看出不出乱码?
      

  22.   

    自己做个东西这里有个解释,不错
    由于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 
      

  23.   

    由于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 
      

  24.   

    想要在doc下运行除了javac -encoding UTF-8 *.java 
    还要做如下两步1。chcp 65001//utf-8  回复命令为 chcp 936//即GBK2。字体修改为:Lucida Console。