Почему этот BufferedReader не читается в указанном формате UTF-8? - PullRequest
2 голосов
/ 30 марта 2012

Я очищаю несколько веб-сайтов, и некоторые из них содержат нелатинские символы и специальные символы, такие как для кавычек, а не " и для апострофов, а не '.

Вот настоящий изогнутый шарик ...

У меня соответствующий текст распечатан на консоли. Все хорошо кодируется, когда я запускаю его в своей среде IDE (Netbeans). Но когда я запускаю его на моем компьютере, “I Need Your Help” распечатывается как: ΓÇ£I Need Your HelpΓÇ¥ ...

Прежде чем кто-либо скажет, что мне нужно установить для JAVA_TOOL_OPTIONS Переменная среды значение -Dfile.encoding=UTF8, позвольте мне сказать, что я уже сделал это, и это все еще проблема. Кроме того, разве я не должен указывать кодировку для буферизованного считывателя как "UTF-8", переопределяющую это?

Вот некоторая информация:

  • Я использую JDK 7 с целевой платформой как 1.7
  • Я работаю на машине с Windows 7 для всех машин, на которых я работаю, и испытываю ту же проблему (у некоторых нет установленного JAVA_TOOL_OPTIONS, но, похоже, это не имеет значения) .
  • Я думаю, что используемая кодировка по умолчанию - 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;
}

Ответы [ 3 ]

2 голосов
/ 30 марта 2012

Здесь есть две возможности.Как сказал user1291492 , возможно, вы правильно прочитали контент, но кодировка, используемая вашим терминалом, отличается от кодировки, используемой вашей IDE.

Другая возможность заключается в том, что исходные данныене в UTF-8.Если вы просматриваете веб-сайт, вам следует обратить внимание на то, что Веб-сайт сообщает, что он использует для кодирования через заголовок Content-Type, а не предполагать, что это всегда UTF-8.

1 голос
/ 30 марта 2012

Выходное «окно» IDE, вероятно, способно понимать и печатать символы utf-8. Консоль может быть не такой продвинутой

0 голосов
/ 27 февраля 2014
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);
  }
...