0
public static void main(String[] args) {
        // TODO code application logic here
        URL url;

        try {
            // get URL content
            url = new URL("http://mp3.zing.vn/album/Chuyen-Tinh-Nha-Tho-Single-Van-Mai-Huong/ZWZAWZAZ.html");
            URLConnection conn = url.openConnection();

            // open the stream and put it into BufferedReader
            BufferedReader br = new BufferedReader(
                               new InputStreamReader(conn.getInputStream()));

            String inputLine;

            //save to this filename
            String fileName = "G:\\test1.txt";
            File file = new File(fileName);

            if (!file.exists()) {
                file.createNewFile();
            }

            //use FileWriter to write file
            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);

            while ((inputLine = br.readLine()) != null) {
                bw.write(inputLine);
            }

            bw.close();
            br.close();

            System.out.println("Done");

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

当我在 netbean 上运行时,这段代码中的文本test1.txt是可以的。当我在 Eclipse 上运行它时,结果:

�     
�{�ב'�w��*_��f���b��/�%uu����DY[��̪JvUf�2�̬p1�;�w��w�;�}}yV��`0$�}�'���sN>��/���^A��<�8q"�ĉ��뛻�����?�k{�ַ�Z"��<(ld2��M���ƶ�Kg�d~&����=�.g2�����B�u3���  ���j�k��:i�7���-��d�w��-�j���H�n�,ݤ/��o�}ku�7>}��o�y�?����;���}�x`;ݾuCKi����������w�|�t�'�Z�=h�|V뻞׷&lt;�VF4H��X��Ô���&gt;ZIl��o9~�y:��!~�$|�����2z�ȳ�{�۩jB�0��GX

哪位大神帮忙解决一下,谢谢!!!

4

1 回答 1

1

您正在检索的网站正在使用您未正确处理的编码。简要查看该站点会发现它是使用 UTF-8 编码的,因此您需要在读取数据时考虑到这一点。InputStreamReader为此在其构造函数中提供了一个选项。

BufferedReader br = new BufferedReader(
                           new InputStreamReader(conn.getInputStream(), "UTF8"));

经过一些测试,我确认在我的机器上,您的代码实际上可以正常工作,因为我的默认编码是 UTF-8(如果您不指定,系统默认字符集将被使用)。这对您来说可能是真的,也可能不是;尝试打印出编码以查看您正在阅读的内容:

System.out.println(new InputStreamReader(conn.getInputStream()).getEncoding());
// prints "UTF8" on my machine.

始终最好指定字符集,以使您的代码独立于平台默认值。

如果上面的打印输出显示 UTF8,或者在指定字符集后仍然看到意外结果,则问题可能出在用于查看输出文件的编辑器上。确保您的文本编辑器可以处理 UTF8,您应该一切顺利。我在 SublimeText 3 中看到了这个:

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <head>              <title>Chuyện Tình Nhà Thơ (Single) - Văn Mai Hương | Album 320 lossless</title>        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
...
于 2013-09-19T16:50:41.433 回答