Lesen/schreiben .txt-Datei mit Sonderzeichen
Öffne ich Editor (Windows) und schreiben
Some lines with special characters
Special: Žđšćč
und gehen Sie zu Speichern unter... "someFile.txt" mit Codierung eingestellt UTF-8.
In Java habe ich
FileInputStream fis = new FileInputStream(new File("someFile.txt"));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(isr);
String line;
while((line = in.readLine()) != null) {
printLine(line);
}
in.close();
Aber ich bekomme nur Fragezeichen und ähnliche "Besondere" Zeichen. Warum?
EDIT: ich habe dieses Eingangs (line in .txt-Datei)
665,Žđšćč
und dieser code
FileInputStream fis = new FileInputStream(new File(fileName));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(isr);
String line;
while((line = in.readLine()) != null) {
Toast.makeText(mContext, line, Toast.LENGTH_LONG).show();
Pattern p = Pattern.compile(",");
String[] article = p.split(line);
Toast.makeText(mContext, article[0], Toast.LENGTH_LONG).show();
Toast.makeText(mContext, Integer.parseInt(article[0]), Toast.LENGTH_LONG).show();
}
in.close();
Und Toast - Ausgang (für diejenigen, die nicht vertraut mit Android, Toast ist nur eine Methode, um zu zeigen, ein pop-up auf dem Bildschirm mit bestimmten text) in Ordnung ist. Die Konsole zeigt "komische Zeichen" (wahrscheinlich wegen der Codierung in der Konsole-Fenster). Aber es schlägt fehl, parsing-eine ganze Zahl weil die Konsole sagt dies (warning: toast output is just fine
) - Problem?
Wie es scheint, wird die Zeichenfolge ein, die einige "komische" Zeichen, die Toast nicht zeigen kann/Rendern, aber wenn ich versuche zu analysieren, stürzt es ab. Vorschläge?
Wenn ich ANSI im Editor funktioniert es (integer Parsen) und es gibt keine sonderbaren chars wie in der Abbildung oben, aber natürlich meine Sonderzeichen nicht funktionieren.
- Was ist in dieser printLine(line) Funktion?
while((line = in.readLine()) != null)
- Macht Java selbst lassen Sie das tun? Ich dachte in Java, Zuordnungen nicht als Ausdrücke...- printLine nur Drucke es auf mein Debugger (Eclipse) - in diesem Fall die zweite Zeile wird "01-04 20:01:23.394: VERBOSE/line(32246): Spezielles: ŽÄÅ¡ŽŽ"
- while((Zeile = in.readLine()) != null) - ja, Sie können dies tun, Eric. Die Bedingung, dass die while-Schleife die Bewertung (A != null) wo ist das Ergebnis des Lesens einer Zeile aus dem stream.
- eigentlich mein problem ist ein wenig anders, eigentlich mein Dateiname ist Žđšćč und ich erhielt den Fehler FileInputStream fis = new FileInputStream(new File("Žđšćč.txt")); plzz helfen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist die Ausgabe-Konsole, die keine Unterstützung für diese Zeichen. Da bist du mit Eclipse, die Sie benötigen, um sicherzustellen, dass es konfiguriert ist, um die Verwendung von UTF-8 auf. Sie können dies tun, indem Fenster - > Einstellungen > allgemein > Arbeitsbereich > " Text File Encoding > auf UTF-8 eingestellt.
Siehe auch:
Update gemäß den aktualisierten Frage-und die Kommentare, die scheinbar der UTF-8-BOM ist der Schuldige. Notepad standardmäßig fügt die UTF-8-BOM auf "speichern". Es so Aussehen, dass die JRE auf Ihrem HTC nicht geschluckt. Sie betrachten wünschen können, verwenden die
UnicodeReader
Beispiel, wie in diese Antwort stattInputStreamReader
im code. Es autodetects und überspringt die Stückliste.Nichts mit dem eigentlichen problem, es ist eine gute Praxis zu schließen Ressourcen in
finally
block, so dass Sie sicherstellen, dass Sie geschlossen werden, im Fall von Ausnahmen.Auch nichts, ich würde vorschlagen, setzen
Pattern p = Pattern.compile(",");
außerhalb der Schleife, oder auch eine statische Konstante, weil es relativ teuer ist, um es zu kompilieren, und es ist unnötig dies zu tun, jedes mal in einer Schleife.Dein code sieht richtig aus - aber eine sehr häufige und leicht, Fehler zu misstake was gedruckt wird, auf dem Bildschirm an, was in den String. Überprüfen Sie mit einem debugger wenn der string nicht bereits richtig gelesen.
Editor nicht speichern Sonderzeichen korrekt. Ich hatte ein ähnliches problem, und ich verwendet Notepad++ statt und die ausgewählten UTf-8-Codierung von dort. Als ich dies Tat, mein Programm nicht mehr abgestürzt bei der Anwendung von String-Bibliothek Methoden, um es anders als wenn ich die text-Datei in Editor.
Editor möglicherweise nicht in der Lage zu behandeln, die nicht-ascii-Zeichen. Versuchen Sie einen anderen text-editor. Wenn Sie halten wollen, was verfügbar ist in windows installieren, versuchen Sie es mit wordpad.
Sehen
http://en.wikipedia.org/wiki/UTF-8
unter "Ungültiger byte-Sequenzen" für spezifische details.
Sind Sie mit dem Charakter der Bekehrung als Teil des servlet-request/response ?
Wenn ja,
request.setEncoding("UTF-8")
oder
response.setCharacterEncoding("UTF-8")
lösen sollte Ihren Zweck.