当前位置: 首页 > 面试题库 >

如何使用utf8字符正确读取url内容?

佴飞驰
2023-03-14
问题内容
    public class URLReader {
         public static byte[] read(String from, String to, String string){
          try {
           String text = "http://translate.google.com/translate_a/t?"+
                        "client=o&text="+URLEncoder.encode(string, "UTF-8")+
                        "&hl=en&sl="+from+"&tl="+to+"";

           URL url = new URL(text);
           BufferedReader in = new BufferedReader(
                        new InputStreamReader(url.openStream(), "UTF-8"));
           String json = in.readLine();
           byte[] bytes = json.getBytes("UTF-8");
           in.close();
           return bytes;
                    //return text.getBytes();
          }
          catch (Exception e) {
           return null;
          }
         }
        }

和:

public class AbcServlet extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  resp.setContentType("text/plain;charset=UTF-8");
  resp.getWriter().println(new String(URLReader.read("pl", "en", "koń")));
 }
}

当我运行它时,我得到:{"sentences"[{"trans":"end","orig":"koďż˝","translit":"","src_translit":""}],"src":"pl","server_time":30}
所以utf
无法正常工作,但是如果我返回编码的url:http://translate.google.com/translate_a/t?client=o&text=ko%C5%84&hl=en&sl=pl&tl=en并粘贴在url栏中,我会正确地:{"sentences":[{"trans":"horse","orig":"koń","translit":"","src_translit":""}],"dict":[{"pos":"noun","terms":["horse"]}],"src":"pl","server_time":76}


问题答案:
byte[] bytes = json.getBytes("UTF-8");

为您提供UTF-8字节序列,因此URLReader.read也为您提供UTF-8字节序列

但是您尝试在未指定编码器的new String(URLReader.read("pl", "en", "koń"))情况下使用进行解码,即Java将使用您的系统默认编码进行解码(不是UTF-8)

尝试:

new String(URLReader.read("pl", "en", "koń"), "UTF-8")

更新资料

这是我机器上的完整工作代码:

public class URLReader {

    public static byte[] read(String from, String to, String string) {
        try {
            String text = "http://translate.google.com/translate_a/t?"
                    + "client=o&text=" + URLEncoder.encode(string, "UTF-8")
                    + "&hl=en&sl=" + from + "&tl=" + to + "";
            URL url = new URL(text);
            URLConnection conn = url.openConnection();
            // Look like faking the request coming from Web browser solve 403 error
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)");
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String json = in.readLine();
            byte[] bytes = json.getBytes("UTF-8");
            in.close();
            return bytes;
            //return text.getBytes();
        } catch (Exception e) {
            System.out.println(e);
            // becarful with returning null. subsequence call will return NullPointException.
            return null;
        }
    }
}

别忘了将\逃逸到\ u0144。Java编译器可能无法正确编译Unicode文本,因此最好以纯ASCII形式编写它。

public class AbcServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/plain;charset=UTF-8");
        byte[] read = URLReader.read("pl", "en", "ko\u0144");
        resp.getOutputStream().write(read) ;
    }
}


 类似资料:
  • 问题内容: 我正在从一个文件中读取,该文件在一行上读取所有内容: 然后,我的扫描程序会从文件中读取该文件并将其放入字符串中: 现在,我希望输出为: 但是相反,我得到了与输入完全相同的东西。也就是说,每个\ n都包含在输出中,并且所有内容都在一行中而不是单独的行中。 我以为Scanner能够正确读取转义字符,但它会像\\ n一样将其复制到String上。 问题答案: 如果写的是文件,则不能使用,因为

  • 问题内容: 当我将其粘贴到浏览器中时,以下方法起作用: 但是,当我尝试使用Python读取URL时,没有任何反应: 我需要对URL进行编码,还是没有看到什么? 问题答案: 要回答您的问题: 您需要,而不是 编辑(2018-06-25):自Python 3起,旧版被替换为(有关详细信息,请参阅https://docs.python.org/3/library/urllib.request.html#

  • 我想以UTF-8快速地逐行读取大的csv文件(大约~1GB)。我已经为它创建了一个类,但它不能正常工作。UTF-8从2字节解码西里尔符号。我使用字节缓冲区来读取它,例如,它有10个字节的长度。因此,如果文件中的符号由10和11字节组成,它将无法正常解码:(

  • 问题内容: 我无法弄清楚/的运作方式。我对此有些了解,但无法使其正常工作。 我知道我可以使用,但是如果这样做,我知道我永远不会理解/ 我只会埋葬这个问题。 目标:调用并返回文件的内容。 每次调用该文件都会增加一次(每页加载)。该文件包含二进制缓冲区的转储,并存储在SSD中。 无论我做什么,都会出现错误或在控制台中。 问题答案: 要使用/,您需要返回承诺的方法。没有包装器,核心API函数就不会这样做

  • 问题内容: 我正在尝试使用Node.js从URL中读取内容,但似乎只有一堆字节。我显然做错了事,但不确定。这是我目前拥有的代码: 任何见识将不胜感激。 问题答案: 尝试使用客户端的on错误事件来查找问题。

  • 问题内容: 我正在使用 mysql dbms存储来自Wikipedia的页面。我已使用指令在my.cnf文件中将字符集编码设置为(维基百科编码): 并使用属性定义创建了我的数据库。 我还通过以下方式更改了mysqld客户端的字符集编码: 在初始化我的jdbc驱动程序时插入属性。 进行查询 但是我注意到mysql服务器用其他字符替换了一些字符。 例如,它替换为。 更新 我已经运行的命令确保这两个和的