代码之家  ›  专栏  ›  技术社区  ›  Marina Rappoport

无法以正确的编码从url读取js文件

  •  3
  • Marina Rappoport  · 技术社区  · 6 年前

    我想从url中读取js文件作为字符串 https://d3c3cq33003psk.cloudfront.net/opentag-67008-473432.js

    我尝试了几种方法(从url读取或下载然后读取),但每次都会收到无法读取的字符,如(\u sd:`.I…)。。。。
    我尝试的方式:
    1、从url下载文件:

    FileUtils.copyURLToFile(jsUrl, file);
    

    2、从url读取:

        StringBuilder sb = new StringBuilder();
        try {
            URL url = new URL(jsUrl);
            // read text returned by server
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                sb.append(line).append("\n");
            }
            in.close();
        } catch (Exception e) {
        }
        return sb.toString();
    

    如果我从url手动下载文件(第页->另存为…)-它可以用记事本++以正常的UTF-8编码打开。
    有人能帮我处理这个奇怪的文件吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Maurice Perry    6 年前

    它被压缩了。使用 GZIPInputStream .

    更新

            InputStream stream = url.openStream();
            if ("gzip".equalsIgnoreCase(cnt.getHeaderField("Content-Encoding"))) {
                stream = new GZIPInputStream(stream);
            }
            BufferedReader in = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
    

    更新2

    使用URLConnection:

            URLConnection cnt = url.openConnection();
            InputStream stream = cnt.getInputStream();
            if ("gzip".equalsIgnoreCase(cnt.getHeaderField("Content-Encoding"))) {
                stream = new GZIPInputStream(stream);
            }
            BufferedReader read = new BufferedReader(new InputStreamReader(stream, "UTF-8"));