Java 为什么此BufferedReader不以指定的UTF-8格式读取?

Java 为什么此BufferedReader不以指定的UTF-8格式读取?,java,encoding,utf-8,bufferedreader,Java,Encoding,Utf 8,Bufferedreader,我正在抓取一些网站,其中一些网站包含非拉丁字符和特殊字符,如“表示引号而不是”,“表示撇号而不是” 这是真正的曲线球 我将相关文本打印到控制台。当我在IDE(Netbeans)中运行它时,一切都编码良好。但当我在计算机上运行它时,“我需要你的帮助”打印为:我需要你的帮助 在任何人说我需要将我的JAVA\u TOOL\u OPTIONS环境变量设置为-Dfile.encoding=UTF8之前,让我说我已经这样做了,这仍然是一个问题。此外,我是否应该将缓冲读取器的编码指定为“UTF-8”覆盖它 以

我正在抓取一些网站,其中一些网站包含非拉丁字符和特殊字符,如
表示引号而不是
表示撇号而不是

这是真正的曲线球

我将相关文本打印到控制台。当我在IDE(Netbeans)中运行它时,一切都编码良好。但当我在计算机上运行它时,
“我需要你的帮助”
打印为:
我需要你的帮助

在任何人说我需要将我的
JAVA\u TOOL\u OPTIONS
环境变量设置为
-Dfile.encoding=UTF8
之前,让我说我已经这样做了,这仍然是一个问题。此外,我是否应该将缓冲读取器的编码指定为
“UTF-8”
覆盖它

以下是一些信息:

  • 我正在使用JDK 7,目标平台为1.7
  • 我在Windows7上运行的所有机器都遇到了同样的问题(有些机器没有设置
    JAVA\u工具\u选项,但这似乎没有任何区别)
  • 我认为它使用的默认编码是Cp1252
这是我的密码。请告诉我您是否需要更多信息。谢谢

/**
 * Using the given url, this method creates and returns the buffered reader for that url
 *
 * @param urlString
 * @return
 * @throws MalformedURLException
 * @throws IOException
 */
public synchronized static BufferedReader getBufferedReader(String urlString) throws MalformedURLException, IOException {
  URL url = new URL(urlString);
  InputStream is = url.openStream();
  BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
  return br;
}

IDE的输出“窗口”可能具有理解和打印utf-8字符的能力。控制台可能不太高级。这里有两种可能性。正如用户1291492所说,可能是您正确读取了内容,但您的终端使用的编码与IDE使用的编码不同


另一种可能是源数据不是UTF-8格式。如果你正在抓取一个网站,那么你应该注意该网站通过
内容类型
标题告诉你它在编码时使用了什么,而不是假设它总是UTF-8格式。

真不敢相信。就是这样。对不起,我一直有很多问题,所以我想我已经试过了。谢谢!@kentcdoubs让骆驼穿过针眼比让微软专有的所谓操作系统很好地与UTF-8配合要容易得多,这尤其令人恼火,因为UTF-8现在不仅是Unicode的主要文本编码,而且是web worldwi上所有文本的主要文本编码我遇到了一个问题,直接从hosta调用java程序:javamyprogram起作用,但当我试图远程运行它时me@hosta“javamyprogram”不起作用。它正在读取一个utf8输入文件。当我添加-Dfile.encoding=utf8时,它起作用了!Thx用于该代码段
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);
  }