【问题标题】:Java getting url with the correct encodingJava获取具有正确编码的url
【发布时间】:2015-12-18 17:33:38
【问题描述】:

我想下载许多网页的源代码,然后写入文件并在 NetBeans 控制台中打印出来。我的编码有问题。首先检查我的代码:

public static final void foo(URL url, Charset endoding, String file) {
    BufferedReader in;
    String readLine;
    try
    {
        in = new BufferedReader(new InputStreamReader(url.openStream(), encoding));
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file) , encoding));
        while ((readLine = in.readLine()) != null) {
            System.out.println(readLine+"\n");
            out.write(readLine+"\n");
        }
        out.flush();
        out.close();
    }
}

我正在 2 个外国网站(例如捷克语和泰语)上对此进行测试

我尝试了 Charset.forName("UTF-8") ,它似乎适用于泰语网页,但实际上不适用于捷克语网页。控制台和文件中包含问号,如 �。

我也尝试过 ISO-8859-2,它可以正确保存文件,但控制台显示的是小矩形而不是字母 ž、š 等。

是否存在任何针对多语言网站(如捷克语、日本语、泰语等)的通用解决方案,我可以正确保存到文件,就像打印到控制台或保存到变量一样?

【问题讨论】:

    标签: java file url encoding utf-8


    【解决方案1】:

    问题是没有终极编码这样的东西。当时最先进的编码可能是 UTF-8,尽管每一方都可以自行决定使用哪种编码。 Here 是一篇非常值得一读的文章,它描述了作为全球解决方案的 char 编码的基本问题。

    因此,最好的解决方案是使用InputStreamReader.getEncoding()获取html页面编码:

    public static final void foo(URL url, String file){
      BufferedReader in;
      String readLine;
      try{
        InputStreamReader isr = new InputStreamReader(url.openStream());
        String encoding = isr.getEncoding(); //if you actually need it, which I don't suppose
        in = new BufferedReader(isr);
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file) , encoding));
        while ((readLine = in.readLine()) != null) {
          System.out.println(readLine+"\n");
          out.write(readLine+"\n");
        }
        out.flush();
        out.close();
      }
    }
    

    这应该按预期工作。

    【讨论】:

    • 嗯,好吧,那我真的不知道该怎么办了。你能给我你的网站 Urlacher 失败的地方吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2014-09-11
    • 2015-01-03
    • 2017-09-12
    相关资源
    最近更新 更多