Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阅读并下载一个页面';s源代码在Java中作为Unicode_Java_Html_Encoding_Unicode - Fatal编程技术网

阅读并下载一个页面';s源代码在Java中作为Unicode

阅读并下载一个页面';s源代码在Java中作为Unicode,java,html,encoding,unicode,Java,Html,Encoding,Unicode,现在,我有一些代码可以读取页面并将所有内容保存到html文件中。然而,也有一些问题。。。一些标点符号和特殊字符显示为问号 当然,如果我手动执行此操作,我会使用Unicode编码而不是默认的ANSI来保存.txt文件。我环顾四周,我所看到的只是抱怨这在Java中是不可能的,或者我不理解的一半解释 无论如何,有人能帮我更正问号吗?下面是我下载页面的代码部分。(列表器创建了一个要下载的URL数组,用于带有页面的站点。您可以忽略这一点,它可以正常工作。) public void URLDownloade

现在,我有一些代码可以读取页面并将所有内容保存到html文件中。然而,也有一些问题。。。一些标点符号和特殊字符显示为问号

当然,如果我手动执行此操作,我会使用Unicode编码而不是默认的ANSI来保存.txt文件。我环顾四周,我所看到的只是抱怨这在Java中是不可能的,或者我不理解的一半解释

无论如何,有人能帮我更正问号吗?下面是我下载页面的代码部分。(列表器创建了一个要下载的URL数组,用于带有页面的站点。您可以忽略这一点,它可以正常工作。)

public void URLDownloader(字符串站点、int起始页、int结束页)引发异常{
String[]pages=URLLister(站点、起始页、结束页);
字符串网页=网页[0];
int fileNumber=起始页;
如果(起始页==0)
fileNumber++;
//换页
对于(int i=0;i
如果手动执行此操作,我将使用Unicode编码而不是默认的ANSI编码保存.txt文件

Windows在这里给了你误导性的术语。没有“Unicode”这样的编码;Unicode是以不同方式编码成字节的字符集。Windows称为“Unicode”的编码实际上是UTF-16LE。这是一种每代码单元两个字节的编码,不兼容ASCII,通常不方便;Web p年龄往往不适合它

(值得一提的是,“ANSI”代码页也与ANSI无关。Plusça change…)

这将使用Java默认编码创建一个文件,这可能是您案例中的ANSI代码页。若要指定不同的编码,请使用可选的第二个参数
PrintWriter

PrintWriter out = new PrintWriter(name + (fileNumber+i) + ".html", "utf-8");
UTF-8通常是一个不错的选择:作为一个UTF,它可以存储所有Unicode字符,并且与ASCII兼容

但是!您也在使用默认编码读取字符串:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
这可能不是页面的编码。同样,您可以使用可选参数指定编码:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "utf-8"));
如果该网页实际上是作为UTF-8使用的,那么这将很好地工作

但如果不是呢?实际上有多种方法可以确定HTML页面的编码:

  • 内容类型:text/html;charset=…
    标题参数(如果存在)

  • 这是什么语言?Java?哇,对不起。是的,它是Java。编辑了标题。更好-我添加了标签。
    
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "utf-8"));
    
    InputStream in = url.openStream();
    OutputStream out = new FileOutputStream(name + (fileNumber+i) + ".html");
    
    byte[] buffer = new byte[1024*1024];
    int len;
    while ((len = in.read(buffer)) != -1) {
        out.write(buffer, 0, len);
    }