2012-03-30 4 views
2

Ich kratze ein paar Websites und einige von ihnen enthalten nicht-lateinische Zeichen und Sonderzeichen wie für Anführungszeichen statt " und für Apostrophe statt '.Warum liest dieser BufferedReader nicht im angegebenen UTF-8-Format?

Hier ist die wirkliche Kurve Ball ...

ich den entsprechenden Text müssen die Konsole ausgedruckt. Alles codiert gut, wenn ich es in meiner IDE (Netbeans) ausführe. Aber wenn ich es auf meinem Computer ausgeführt wird “I Need Your Help” ausgedruckt als: ΓÇ£I Need Your HelpΓÇ¥ ...

Bevor jemand sagt, ich brauche meine JAVA_TOOL_OPTIONS Umgebungsvariable zu setzen, mich zu -Dfile.encoding=UTF8 lassen sagen, dass ich bereits getan haben, und das ist immer noch ein Problem . Außerdem, sollte nicht meine Festlegung der Kodierung für den gepufferten Leser "UTF-8" das sowieso überschreiben?

Hier einige Informationen:

  • Ich bin das JDK 7 mit der Zielplattform als 1,7
  • auf einem Windows-7-Maschine Ich bin dies auf Ich laufe mit für alle Maschinen laufen und das gleiche Problem (einige haben nicht das JAVA_TOOL_OPTIONS Set, aber das scheint keinen Unterschied zu machen).
  • ich denke, die Standard-Kodierung, die es Cp1252 ist ist mit ...

mein Code hier. Lassen Sie mich wissen, ob Sie weitere Informationen benötigen. Vielen Dank!

/** 
* 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; 
} 
+0

Ich habe ein Problem, wo ein Java-Programm direkt von Hosta Aufruf: java myprogram gearbeitet, aber als ich versuchte, sich aus der Ferne ssh me @ Hosta „java myprogram“ ausführen es hat nicht funktioniert. Es wurde eine utf8 Eingabedatei gelesen. Als ich -Dfile.encoding = utf8 hinzugefügt habe, hat es funktioniert! Thx für diesen Ausschnitt – Paul

Antwort

2

Es gibt zwei Möglichkeiten hier. Als user1291492 sagte, könnte es sein, dass Sie den Inhalt richtig lesen, aber die Codierung, die Ihr Terminal verwendet, ist anders als die, die Ihre IDE verwendet.

Die andere Möglichkeit ist, dass die Quelldaten nicht in UTF-8 sind. Wenn Sie eine Website scrapen, sollten Sie darauf achten, was die Website Ihnen für die Codierung über den Header Content-Type sagt, nicht davon ausgehen, dass es immer UTF-8 ist.

+0

Danke, es war das Konsolenproblem ... Ich bin ein wenig peinlich ... – kentcdodds

1

IDEs Ausgabe "Fenster" hat wahrscheinlich die Fähigkeit, utf-8 Zeichen zu verstehen und zu drucken. Die Konsole ist möglicherweise nicht so weit fortgeschritten

+0

Kann es nicht glauben. Das war's. Tut mir leid, ich hatte so viele Probleme damit, dass ich dachte, ich hätte das schon versucht. Vielen Dank! – kentcdodds

+1

@kentcdodds Es ist einfacher, ein Kamel durch das Nadelöhr zu fahren, als Microsofts eigenes, sogenanntes Betriebssystem mit UTF-8 zu spielen, was besonders ärgerlich ist, da UTF-8 jetzt die dominante Textkodierung ist nur von Unicode aber von allem Text, der im Netz weltweit gefunden wird. – tchrist

0
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); 
    } 
Verwandte Themen