从InputStream读取UTF-8编码的文本

时间:2015-05-31 05:14:30

标签: java url utf-8 inputstream bufferedreader

我在输入流中读取所有日文/中文字符时遇到问题。

基本上,我从API检索JSON对象。

以下是我的代码:

    try {
        URL url = new URL(string);
        BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),StandardCharsets.UTF_8));
        result = br.readLine();
        br.close();
    } catch(Exception e) {

}

由于某种原因,输入流不会读取所有字符。可能是什么问题呢?

具体来说,当我在控制台中打印出来时,会出现一些字符,而有些则显示为带有问号的黑框。此外,当我通过浏览器检查实际的JSON对象时,没有带问号的黑框。

2 个答案:

答案 0 :(得分:0)

“打印到控制台”时所看到的内容与是否读取数据无关,而是与控制台的功能有关。

如果您从URL获取数据,并且您确定已获取的字节代表UTF-8编码文本,并且整个数据适合一行文本,那么您的代码就没有理由不行。

听起来你不确定是否有效,因为你试图将文本打印到控制台。也许你的控制台没有设置为渲染UTF-8编码的文本?也许你的控制台字体没有足够的字形来覆盖字体?

您可以尝试以下两件事:

  1. 不是将文本写入控制台,而是将其保存到文件中。然后使用像hexdump -C这样的命令(在* nix系统上,我不知道如何在Windows中执行此操作)并查看二进制表示以确保所有预期的字符都在那里。

  2. 将数据保存到文本文件,然后在Web浏览器中打开,因为浏览器可能比控制台具有更丰富的字体支持。

  3. 如果您仍然怀疑自己错误地读取了远程数据,可以通过JSON验证程序运行检索到的文本,只是为了确保。

答案 1 :(得分:-1)

请改为尝试:“ISO-8859-1”。