为什么这个BufferedReader没有以指定的UTF-8格式读取?

时间:2012-03-30 16:23:35

标签: java encoding utf-8 bufferedreader

我正在抓取一些网站,其中一些网站包含非拉丁字符和等特殊字符作为引号,而不是"作为撇号而非{{1} }。

这是真正的曲线球......

我将相关文本打印到控制台。当我在IDE(Netbeans)中运行它时,一切都编码良好。但是,当我在计算机上运行时,'打印为:“I Need Your Help” ...

在有人说我需要将ΓÇ£I Need Your HelpΓÇ¥环境变量设置为JAVA_TOOL_OPTIONS之前,请告诉我我已经这样做了,这仍然是一个问题。此外,我不应该指定缓冲读卡器的编码为-Dfile.encoding=UTF8覆盖它吗?

以下是一些信息:

  • 我正在使用目标平台的JDK 7作为1.7
  • 我在Windows 7计算机上运行我正在运行的所有计算机并遇到同样的问题(有些没有"UTF-8"设置,但似乎没有差)。
  • 我认为它使用的默认编码是Cp1252 ...

这是我的代码。让我知道您是否需要更多信息。谢谢!

JAVA_TOOL_OPTIONS

3 个答案:

答案 0 :(得分:2)

这里有两种可能性。正如 user1291492 所说,可能是您正确读取了内容,但终端使用的编码与IDE使用的编码不同。

另一种可能性是源数据不是UTF-8。如果你正在抓取一个网站,那么你应该注意网站通过Content-Type标题告诉你它用于编码的内容,而不是假设它总是UTF-8。

答案 1 :(得分:1)

IDE的输出“窗口”可能具有理解和打印utf-8字符的能力。控制台可能不是那么先进

答案 2 :(得分:-1)

try {
        reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
      String line="";
      String s ="";
   try 
   {
       line = reader.readLine();
   } 
   catch (IOException e) 
   {
       e.printStackTrace();
   }
      while (line != null) 
      {
       s = s + line;
       s =s+"\n";
       try 
       {
           line = reader.readLine();
       } 
       catch (IOException e) 
       {
           e.printStackTrace();
       }
    }
    tv.setText(""+s);
  }